IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[2.0] Ajouter dans élément dasn un XmlDocumennt selon un schéma.xsd


Sujet :

C#

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut [2.0] Ajouter dans élément dasn un XmlDocumennt selon un schéma.xsd
    Bonjour,

    j'utiliser un objet de type XmlDocument pour construire un document XML. L'ajout d'un nouvel élément dans le document xml doit respecter un schéma .xsd. Actuellement, avant d'insérer mon nouvel élémnet, je vérifie si j'ai élémnent x ou y existe déjà et j'utilise la méthdoe insertbefore ou insertafter.

    Est-ce que quelqu'un connaîtrait un moyen d'insérer un nouvel XML automatiquement au bon endroit selon un schéma donné sans chaque fois vérifier si l'élément x ou y sont présont ou non.

    Par avance, merci pour votre aide!

    Cédric

  2. #2
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Est-ce qu'il y'a un rapport avec les web services ou tu veux juste ajouter un élément à un fichier XML ?
    Mehdi Feki : Modérateur .Net

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut Mehdi tn,

    mon but est d'ajouter un élément de façon automatique dans structure XML (cela peut être un fichier, mais pas forcément). Dans mon cas, j'utilise la technologie des service Web pour ajouter mon nouvel élément dans ma strucutre XML, Voilà pourquoi j'ai ma question ici!

    Si ceci est faux dis-moi à quel endroit, je devrais mettre ma question!

    Par avance, merci de ton aide!

    Cédric

  4. #4
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Bonjour,

    Effectivement, le sujet serait mieux placé dans le forum C# puisqu'il traite de la manipulation des documents XML. Sinon le sujet a été traité plusieurs fois sur le forum, je te propose donc de faire une recherche :

    Clique sur le lien Recherche.

    Ensuite dans la zone Mots-clefs, tu tapes : ajouter element xml

    Dans la section "Chercher dans les forums", clique sur dot net.

    Enfin clique sur le bouton "Effectuer la recherche".
    Mehdi Feki : Modérateur .Net

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Salut Medhi_tn,

    Merci pour le conseil, j'ai effectivement lu quelques articles traitant du sujet, mais je n'ai pas trouvé celui répondant à ma question. Pour t'aider à comprendre voici un exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <root>
    <A>
    <A1>...</A1>
    <A2>...</A2>
    <AA>...</AA>
    <AB>...</AB>
    </A>
    <B>
    </B>
    <C>
    </C>
    </root>
    Cette structure est chargé dans un objet de type XmlDocument. Maintenant je veux ajouter le noeud <A3> qui doit se trouver selon un schémà après le noeud <A2> et avant le noeud <A4>. Comme les éléments se trouvant dans la structure <A> (<A1><A2>><A3> et <A4>) sont optionnels, actuellement je fais "selectsinglenode" pour vérifier si le noeud A1,A2, et A4 et suivant quel noeud j'ai trouvé en premier, je fais soit un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ....
    noeudA.insertAfter(newNoeud, noeudRef),
    ...
    si le noeudRef correspond A1 ou A2

    Soit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    noeudA.insertBefor(newNoeud, noeudRF)
    Si noeudRef correspond à A4

    J'aimerais savoir s'il y un moyen beaucoup plus simple d'ajouter un noeud dans une structure Xml selon schéma et avec quel type d'objet (DataSet, XmlDocument,....)?

    Par avance, je vous remercie pour votre aide!

    Cédric

  6. #6
    Membre expérimenté
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Points : 1 566
    Points
    1 566
    Par défaut
    Salut Cédric,

    Je ne vois pas comment tu peux mes faire les coses automatiques si tu connais à l'avance que A1 doit avoir une valeur X1, A2=>X2 .......

    Est-ce que tu génére les valeurs automatiquement à partir de ton XSD ?
    Ou ton code connait la structure à l'avance comme l'exemple ci-dessus ?
    Mehdi Feki : Modérateur .Net

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 15
    Points : 18
    Points
    18
    Par défaut
    Salut Cédric,
    Ta question est très intéressante !
    je te propose la solution suivante :
    1-Créer un dataset typé (voir piece jointe), appelons cet dataset : MyStrongNamedDataSet
    2-Prenant cet exemple d’un fichier XML qui correspond à cet dataset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <?xml version="1.0" standalone="yes"?>
    <MyStrongNamedDataSet xmlns="http://tempuri.org/MyStrongNamedDataSet.xsd">
      <A>
        <A1>A1Data</A1>
        <A2>A2Data</A2>
        <A3>A3Data</A3>
        <A4>A4Data</A4>
        <AA>AAData</AA>
        <BB>BBData</BB>
      </A>
      <B />
      <C />
    </MyStrongNamedDataSet>
    3-Virons les balises A3 et A4, appelant ce fichier XML : InPutXml.xml ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?xml version="1.0" standalone="yes"?>
    <MyStrongNamedDataSet xmlns="http://tempuri.org/MyStrongNamedDataSet.xsd">
      <A>
        <A1>A1Data</A1>
        <A2>A2Data</A2>
        <AA>AAData</AA>
        <BB>BBData</BB>
      </A>
      <B />
      <C />
    </MyStrongNamedDataSet>
    4- Passant au code, et je te laisse savourer la force des dataset typés:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
                MyStrongNamedDataSet ds = new MyStrongNamedDataSet();
                ds.ReadXml("InPutXml.xml");
                (ds.A.Rows[0] as MyStrongNamedDataSet.ARow).A3 = "A3 Data To Injected in the right place";
                (ds.A.Rows[0] as MyStrongNamedDataSet.ARow).A4 = "A4 Data To Injected in the right place";
                ds.WriteXml("Result.xml");
    resulat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      <?xml version="1.0" standalone="yes" ?> 
    - <MyStrongNamedDataSet xmlns="http://tempuri.org/MyStrongNamedDataSet.xsd">
    - <A>
      <A1>A1Data</A1> 
      <A2>A2Data</A2> 
      <A3>A3 Data To Injected in the right place</A3> 
      <A4>A4 Data To Injected in the right place</A4> 
      <AA>AAData</AA> 
      <BB>BBData</BB> 
      </A>
      <B /> 
      <C /> 
      </MyStrongNamedDataSet>
    En conclusion, tu n’as pas à prévoir l’emplacement des propriétés (XML )à insérer, c’est le dataset typé qui va s’en occuper (xsd).

    J'ai attaché le projet pour tester toi même !
    j'espère que ca correspond à ce que tu voulais faire.

    A titre d’information, avec le framwork 3.5 (Linq to XML, XElement ) la solution sera un jeu d’enfant.
    ______
    Roshdy
    MCSD.NET MCDBA MCPD.WEB
    SCJP SCBCD SCWCD
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 103
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 103
    Points : 1 561
    Points
    1 561
    Par défaut
    La structure XML n'est jamais qu'un arbre... par conséquent... tu applique les algorithmes de recherches/insertions dans les arbres...

    Maintenant je ne crois pas qu'il soit possible de dire au système je te file un schéma, et ensuite je te donne le noeud A4... à toi de l'ajouter toi meme au bon endroit selon les spécifications du schéma...

    Certes l'encapsulation xml de .NET est performante et puissante, mais il ne faut pas non plus lui demander la lune...

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut [FrameWork 2.0] Problème affectation réponse XML dans classe proxy
    Bonjour tout le monde,

    J'ai un Service Web auquel est liée une classe proxy. Dans cette classe proxy, j'utilise une méthode chercher(). Voir code ci-dessous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
     
    string certPath = @"C:\cb\certificat\Test.cer";
    ...
    NetworkCredential credentials = new NetworkCredential();
    CredentialCache cache = new CredentialCache();
     
    classProxy proxy = new classProxy();
     
    .....
     
    proxy.Url = @"https://....";
    proxy.ClientCertificates.Add(X509Certificate.CreateFromCertFile(certPath));
     
    credentials.UserName = username;
    credentials.Password = password;
    proxy.PreAuthenticate = true;
    cache.Add(new Uri("https://...."), "Basic", credentials);
    proxy.Credentials = cache;
    proxy.EnableDecompression = true;
     
    ....
    res = proxy.chercher(....);
    ....
    Jusqu'à tout récemment, dès que la méthdoe chercher(I) est appelée, cela déclenchait une exception, car le fournisseur de la méthdoe retournait du text/html dans Content-Type du Header. Ce dernier a corriger son problème et retourne du text/xml dans Content-Type du Header et cela ne déclenche plus d'exception, mais le problème est que ma variable "res" est toujours affectée à null. Pourtant avec le "sniffer" HTTP Analyser v2, je vois qu'il y a une réponse qui m'est retourné. J'ai l'impression que c# n'accepte cette réponse.

    Est-ce quelqu'un aurait un idée de quoi cela pourrait venir et comment corriger ceci afin que la variable res soit correctement affectée.

    D'avance merci beaucoup pour votre aide!

    Cédric

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2005
    Messages
    351
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2005
    Messages : 351
    Points : 346
    Points
    346
    Par défaut
    Oups!,

    Pardon, le dernier post ne correspond pas à ce sujet, je me suis trompé!

    Cédric

Discussions similaires

  1. [Tableaux] ajout d'éléments dans un tableau
    Par maysa dans le forum Langage
    Réponses: 7
    Dernier message: 06/11/2006, 10h09
  2. Réponses: 3
    Dernier message: 26/08/2006, 14h03
  3. ajouter un élément dans une liste
    Par Le Mérovingien dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 02/07/2006, 17h43
  4. Ajout nouveaux éléments dans liste de choix
    Par Crazyblinkgirl dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 23/06/2006, 15h17
  5. [Tableaux] ajout d'élément dans un tableau
    Par maximenet dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2006, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo