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 :

[C#-XPATH]Problème de création XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Par défaut [C#-XPATH]Problème de création XML
    Bonjour,
    J'ai une méthode qui crée des enregistrements dans un fichier XML.
    Voici le code:
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    XmlDoc.Load(sPath + "XMLTarifsTransporteurs.xml");
                    Navigator = XmlDoc.CreateNavigator();
                    string ExpXPath = "//TarifTransporteur/Transporteur";
                    Nodes = Navigator.Select(Navigator.Compile(ExpXPath));
                    if (Nodes.Count != 0)
                    {
                        Nodes.MoveNext();
                        // On crée le noeud principal (Transporteur). 
                        Nodes.Current.InsertElementAfter("", "Transporteur", "", "");
                        // On se place sur le noeud ainsi créé. 
                        Nodes.Current.MoveToNext(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "NumID", "", NuméroID);
     
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.PrependChildElement("", "Région", "", "");
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "Nom", "", mesDonnées[0, 0]);
     
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.PrependChildElement("", "Département", "", "");
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "NumCode", "", mesDonnées[0, 1]);
     
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.PrependChildElement("", "Palette", "", mesDonnées[0, 2]);
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "id", "", "1");
                        //???
                        //Nodes.Current.MoveToNext(XPathNodeType.Element);
                        Nodes.Current.AppendChildElement("", "Palette", "", mesDonnées[0, 3]);
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "id", "", "2");
     
                        XmlDoc.Save(sPath + "XMLTarifsTransporteurs.xml");
                    }
    Et voici ce que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <Transporteur NumID="F-TRP001">
        <Région Nom="Aquitaine">
          <Département NumCode="24">
            <Palette id="1">120<Palette id="2">200</Palette></Palette>
          </Département>
        </Région>
      </Transporteur>
    Alors que je voudrais obtenir ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <Transporteur NumID="F-TRP001">
        <Région Nom="Aquitaine">
          <Département NumCode="24">
            <Palette id="1">120</Palette>
            <Palette id="2">200</Palette>
          </Département>
        </Région>
      </Transporteur>
    J'ai tenté toutes les possibilités offertes par XPathNodeIterator.Current mais jusqu'ici en vain.
    Quelqu'un aurait-il la solution ?
    D'avance merci.

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Salut,

    As tu jeté un coup d'oeil sur MoveToParent()?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                        Nodes.Current.MoveToParent(XPathNodeType.Element);
                        Nodes.Current.AppendChildElement("", "Palette", "", mesDonnées[0, 3]);
                        Nodes.Current.MoveToChild(XPathNodeType.Element);
                        Nodes.Current.CreateAttribute("", "id", "", "2");
    Je n'ai pas testé le code, mais tu devrais remonter au noeud parent "Département" afin d'ajouter un noeud enfant

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Par défaut
    Merci de ta réponse FrameBreak.
    J'ai testé mais ça ne fonctionne pas. J'ai un message d'erreur:
    "id est un nom d'attribut dupliqué". Donc, dans ce cas il se place sur un attribut déjà créé.
    J'ai essayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nodes.Current.MoveToParent();
    Nodes.Current.MoveToChild(XPathNodeType.Element);
    Nodes.Current.AppendChildElement("", "Palette", "", mesDonnées[0, 3]);
    Nodes.Current.MoveToChild(XPathNodeType.Element);
    Nodes.Current.CreateAttribute("", "id", "", "2");
    Mais j'obtiens le même résultat qu'au départ.

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Bonjour,
    tu peux tenter la dernière réponse de Hinault Romaric sur cette discussion.
    Ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                    Nodes.Current.MoveToChild(XPathNodeType.Element);
                    Nodes.Current.PrependChildElement("", "Palette", "", mesDonnées[0, 2]);
                    Nodes.Current.MoveToChild(XPathNodeType.Element);
                    Nodes.Current.CreateAttribute("", "id", "", "1");
     
     
                    //on créé un nouveau noeud frère à la suite de celui en cours
                    Nodes.Current.InsertElementAfter("", "Palette", "", mesDonnées[0, 3]);
                    //on se place sur le nouveau noeud
                    Nodes.Current.MoveToNext(XPathNodeType.Element);
                    //on ajoute un attribut a celui ci 
                    Nodes.Current.CreateAttribute("", "id", "", "abc");

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2004
    Messages : 93
    Par défaut
    Merci à toi chrismonoye. C'était exactement cela qu'il fallait faire. Et, à la réflexion, c'était on ne peut plus clair. Mais il est difficile de trouver de la documentation complète et explicite sur ce langage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de création de fichier XML
    Par libery dans le forum C#
    Réponses: 1
    Dernier message: 12/06/2009, 19h43
  2. [DOM] probléme de création d'un nouveau fichier XML
    Par nonna dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 29/04/2008, 10h48
  3. [XPATH] problème lecture dans fichier XML
    Par DiamonDonald dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 26/02/2008, 09h57
  4. Problème de création de fichier XML
    Par TheReturnOfMuton dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/12/2007, 13h56
  5. [XML-XPATH] Problème dans un for each
    Par stailer dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 26/12/2005, 12h11

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