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

Windows Forms Discussion :

[C#] XML -> parcourir des noeuds un après l'autre ?


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2006
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 46
    Points : 22
    Points
    22
    Par défaut [C#] XML -> parcourir des noeuds un après l'autre ?
    Bonjour,

    J'ai un fichier XML qui ressemble à ceci:

    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
    <?xml version="1.0" encoding="UTF-8"?>
    <alleProfile>
      <profil name="Tim">
        <output>
          <druck>
            <druckanzahl>123</druckanzahl>
            <papierart>A4 Ungelocht</papierart>
            <rucksendung>Zum Kunde</rucksendung>
            <kuvertierung>ja</kuvertierung>
          </druck>
        </output>
      </profil>
      <profil name="Test">
        <output>
          <druck>
            <druckanzahl>456</druckanzahl>
            <papierart>A4 Gelocht</papierart>
            <rucksendung>Zum Kunde</rucksendung>
            <kuvertierung>nein</kuvertierung>
          </druck>
        </output>
      </profil>
      <profil name="Neutest">
        <output>
          <archiv>
            <archivdokumentklasse>Rechnung</archivdokumentklasse>
          </archiv>
        </output>
      </profil>
    </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 : 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
    private void loadProfiles(string aFileName)
            {
                try
                {
                    // Profildatei Laden
                    XmlTextReader reader = new XmlTextReader(aFileName);
                    while (reader.Read())
                    {
                        // ProfilNamen auslesen und der Liste hinzufügen
                        if(reader.NodeType == XmlNodeType.Element)
                        {
                            if(reader.Name.Equals("profil"))
                            {
                                // Trouvé !!
                            }
                        }
                    }
                    reader.Close();
                }
                catch (System.IO.FileNotFoundException)
                {
                    // Rien
                }
            }
    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 !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 324
    Points : 343
    Points
    343
    Par défaut
    Bonjour,
    Le code que tu as n'es pas tres utile pour manipuler des XmlNode, Tu devrais jeter un oeil a la FAQ car pour manipuler un fichier Xml il faut recupere un objet XmlNode et a partir de la tu pourra faire un parcours grace au membre ChildNodes du node en cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    XmlNode MonPremierFils = MonNode.ChildNodes[0];
    XmlNode LeDeuxiemeFilsDeMonTroisiemeFils = MonNode.ChildNodes[2].ChildNodes[1]
    Etc...
    1 || 1 = 1
    1 && 1 = 1
    1 * 1 = 1
    Bon après tout, peut-être que Van Damme avait raison :
    1 + 1 = 1 // harmonie parfaite

  3. #3
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Je m'incruste dans la discution.

    En faisant une scrutation par élément puis par bloc, le pointeur d'XmlReader n'a pas l'air d'être au bon endroit.

    Est-il possible de déplacer le pointeur du XmlReader à la fin du 'bon' bloc, si je prend l'exemple de TheParadoX, j'ai en gros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (reader.IsStartElement("output"))
    {
    	string nomBloc = reader.ReadInnerXml();
    }
    reader.Read(); // ici je pointe sur la balise /alleProfils :( au lieu de /profil
    Je dois avoir fait une erreur, ou utilisé une mauvaise fonction.

    Merci.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/03/2010, 13h30
  2. Réponses: 1
    Dernier message: 11/07/2008, 13h01
  3. [SimpleXML] XML et parcours des noeuds avec foreach
    Par kult dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 15/11/2005, 15h36
  4. [XML] Parser selon des noeuds enfants
    Par GLDavid dans le forum Modules
    Réponses: 5
    Dernier message: 20/08/2004, 20h42
  5. [VB.NET] XML - Trier des noeuds
    Par nako dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/06/2004, 09h13

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