[Resolu][C#.NET] XML -> Un lire des noeuds un après l'autre ?

XML -> Un lire des noeuds un après l'autre ? [Resolu][C#.NET] - C#/.NET managed - Programmation

Marsh Posté le 04-09-2006 à 12:41:06    

Bonjour,
 
J'ai un fichier XML qui ressemble à ceci:
 

Code :
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <alleProfile>
  3.   <profil name="Tim">
  4.     <output>
  5.       <druck>
  6.         <druckanzahl>123</druckanzahl>
  7.         <papierart>A4 Ungelocht</papierart>
  8.         <rucksendung>Zum Kunde</rucksendung>
  9.         <kuvertierung>ja</kuvertierung>
  10.       </druck>
  11.     </output>
  12.   </profil>
  13.   <profil name="Test">
  14.     <output>
  15.       <druck>
  16.         <druckanzahl>456</druckanzahl>
  17.         <papierart>A4 Gelocht</papierart>
  18.         <rucksendung>Zum Kunde</rucksendung>
  19.         <kuvertierung>nein</kuvertierung>
  20.       </druck>
  21.     </output>
  22.   </profil>
  23.   <profil name="Neutest">
  24.     <output>
  25.       <archiv>
  26.         <archivdokumentklasse>Rechnung</archivdokumentklasse>
  27.       </archiv>
  28.     </output>
  29.   </profil>
  30. </alleProfile>


 
Il s'agit d'un fichier de gestion de profils pour une application. Maintenant, quand je veux charger un profil dans l'application, je cherche d'abord le noeud qui contient le nom de mon profil recherché:
 

Code :
  1. private void loadProfiles(string aFileName)
  2.         {
  3.             try
  4.             {
  5.                 // Profildatei Laden
  6.                 XmlTextReader reader = new XmlTextReader(aFileName);
  7.                 while (reader.Read())
  8.                 {
  9.                     // ProfilNamen auslesen und der Liste hinzufügen
  10.                     if(reader.NodeType == XmlNodeType.Element)
  11.                     {
  12.                         if(reader.Name.Equals("profil" ))
  13.                         {
  14.                             // Trouvé !!
  15.                         }
  16.                     }
  17.                 }
  18.                 reader.Close();
  19.             }
  20.             catch (System.IO.FileNotFoundException)
  21.             {
  22.                 // Rien
  23.             }
  24.         }


 
Et cela fonctionne plutot bien; mais voici mon probleme: une fois le profil trouvé, j'aimerais lire tout le contenu de la balise <output> récursivement, cad récupérer tous les sous-noeuds ainsi que leur contenu.
 
Quand je fais "MessageBox.Show("Inner XML = " + reader.ReadInnerXml());" à l'endroit du "//trouvé" dans le code d'en haut, j'obtiens tout le contenu de mon Output. Mais comment l'explorer à son tour ?
 
J'ai deja tenté avec un foreach, avec un nouveau reader et avec un getChildByID ... mais je n'y parviens pas...
Quelqu'un a une idée ?
 
Il me faut juste un moyen pour parcourir un noeud (profil) et de récupérer les valeurs des balises...
 
merci  :sweat:


Message édité par ParadoX le 04-09-2006 à 14:29:54

---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Marsh Posté le 04-09-2006 à 12:41:06   

Reply

Marsh Posté le 04-09-2006 à 14:29:34    

Reply

Marsh Posté le 04-09-2006 à 14:32:19    

Plutot que d'utiliser un XmlTextReader, tu peux utiliser XmlDocument.
 
Charge le fichier avec le methode Load.
 
XmlDocument fournit les outils un acces au document sous forme d'arbre. Chaque element est un noeud (XmlNode) et chaque noeud possede la liste de ses enfants (champs ChildNodes).
Avec cette representation, on peut facilement implenter les algos s'appliquants aux structures en arborescence ; et en particulier chercher recursivement un noeud.
 
edit : mouarf le temps de poster et grille


Message édité par FrozenPaladin le 04-09-2006 à 14:33:44
Reply

Marsh Posté le 04-09-2006 à 16:17:39    

jep, c'était l'aspect récursif que javais oublié d'implémenter  :jap:


---------------
Pier noir la mèr - La chanson par HFR Band - Topic TrueCrypt
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed