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 :

Lire le noeud enfant de l'enfant d'un fichier XML


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut Lire le noeud enfant de l'enfant d'un fichier XML
    Bonjour,

    Suite à la résolution de mon problème concernant la lecture de noeud en XML ici : http://www.developpez.net/forums/d14...-fichier-conf/

    Je me retrouve dans une situation différente à laquelle je ne trouve pas de solution (je débute vraiment en XML).

    J'ai un fichier XML qui ce compose de cette façon:
    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
    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <section name="Fournisseur" type="MonNameSpace.FournisseurSectionHandler, MonNameSpace"/>
      <Fournisseur>
        <Wurth>
          <nom>Wurth</nom>
          <Code>70399991</Code>
          <Colonne>
            <numColCodeAD>1</numColCodeAD>
            <numColNomAD>2</numColNomAD>
            <numColMontHT>3</numColMontHT>
            <numColNumFact>4</numColNumFact>
            <numColAvFa></numColAvFa>
          </Colonne>
        </Wurth>
        <Berner>
          <nom>Berner</nom>
          <Code>70399990</Code>
          <Colonne>
            <numColCodeAD>1</numColCodeAD>
            <numColNomAD>2</numColNomAD>
            <numColAvFa></numColAvFa>
            <numColNumFact>4</numColNumFact>
            <numColMontHT>3</numColMontHT>    
          </Colonne>
        </Berner>
        <FourTest>
          <nom>FourTest</nom>
          <Code></Code>
          <Colonne></Colonne>
        </FourTest>
      </Fournisseur>
    </configuration>
    Dans ce fichier XML, j'arrive à lire ce que contient chaque noeud enfant de "Fournisseur" (Wurth, Berner, FourTest).

    Ce que j'aimerai maintenant c'est lire ce qui est contenu dans le noeud "Colonne" de chaque enfant du noeud "Fournisseur", c'est à dire <numColCodeAD> , <numColNomAD>, ect

    J'ai bien réussi a extraire ces valeurs, seulement elle sorte d'un bloc et avec les valeurs du noeud parent, je cherche uniquement à récupérer ce qu'il y a dans "Colonne".

    Voici ce que j'ai fais pour l'instant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    XmlNodeList myChildNode = unxml.GetElementsByTagName("Fournisseur");
                foreach (XmlNode unNode in myChildNode)
                {
                    foreach (XmlNode unNode2 in unNode.ChildNodes)
                    {
                        MessageBox.Show(unNode2.InnerText);
                    }
                }

    Voila, j'attends vos conseil.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    665
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonsoir,
    pour la manipulation d'un document XML en mémoire, nous avons System.Xml et System.Xml.Linq.

    Coté System.Xml, la requête pourrait ressembler à cela :
    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
                XmlDocument unxml = new XmlDocument();
                unxml.Load(strFilePath);
     
                XmlNode root = unxml.DocumentElement;
                XmlNode nodeParent = root.SelectSingleNode("descendant::Fournisseur");
                XmlNodeList ColonneList = nodeParent.SelectNodes("descendant::Colonne");
     
                foreach (XmlNode Colonne in ColonneList)
                {
                    var ColonneAnonyme = new
                    {
                        numColCodeAD = Colonne["numColCodeAD"].InnerXml,
                        numColNomAD = Colonne["numColNomAD"].InnerXml,
                        numColMontHT = Colonne["numColMontHT"].InnerXml,
                        numColNumFact = Colonne["numColNumFact"].InnerXml,
                        numColAvFa = Colonne["numColAvFa"].InnerXml
                    };
                    MessageBox.Show(ColonneAnonyme.ToString());
                }


    Coté LINQ to XML, la requète serait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                XDocument xDoc = XDocument.Load(strFilePath);
     
                var data = from item in xDoc.Descendants("Colonne")
                           select new
                           {
                               numColCodeAD = item.Element("numColCodeAD").Value,
                               numColNomAD = item.Element("numColNomAD").Value,
                               numColMontHT =  item.Element("numColMontHT").Value,
                               numColNumFact =  item.Element("numColNumFact").Value,
                               numColAvFa =  item.Element("numColAvFa").Value
                           };
                foreach (var p in data)
                    //Console.WriteLine(p.ToString());
                MessageBox.Show(p.ToString());
    Une remarque : je trouve bizarre ces balises avec le nom des marques (Würth, Berner), ne sont elles pas superflues dans le document XML ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 63
    Points : 44
    Points
    44
    Par défaut
    Bonjour chrismonoye,

    Je viens d'essayé ta solution en System.Xml, tout fonctionne à merveille et je t'en remercie.

    Une remarque : je trouve bizarre ces balises avec le nom des marques (Würth, Berner), ne sont elles pas superflues dans le document XML ?
    En effet, la composition de mon document XML n'est peut être pas la plus limpide possible, je vais revoir ca.


    Merci encore pour cette réponse rapide

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

Discussions similaires

  1. [JDOM] Problème pour lire les noeuds avec JDOM
    Par Eclix dans le forum Format d'échange (XML, JSON...)
    Réponses: 7
    Dernier message: 26/05/2014, 18h11
  2. lire un fichier XML avec des noeuds, enfants, etc
    Par thor76160 dans le forum C#
    Réponses: 23
    Dernier message: 04/09/2009, 15h14
  3. Réponses: 2
    Dernier message: 21/04/2009, 10h54
  4. XSL ne parvient pas à lire les noeuds XML ??
    Par yahn dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 27/06/2004, 19h29

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