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 :

Parcours d'arbre XML


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut Parcours d'arbre XML
    Bonjour à tous,

    Je fais un programme C# qui parcourt un arbre XML d'une façon X ou Y. Cela marche bien

    Je souhaite désormais développer un nouveau module dans mon programme.
    Je souhaite lister tous les chemins possibles de l'arbre XML dans un tableau... Je sais parcourir un arbre XML complet par méthode récusive mais je ne vois pas comment faire mon listing...

    Par exemple, si mon arbre est le suivant :


    Je dois afficher dans mon tableau (l'ordre des lignes n'importe pas) :
    • ABDX
    • ABDY
    • ABE
    • ACF


    Merci par avance pour votre aide

    Steve

  2. #2
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 96
    Par défaut
    Bonjour,
    La réponse va dépendre de l'algorithme de ta fonction récursive ...
    Comment tu fais !!

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    Non ce que je voulais dire c'est que je sais comment parcourir l'arbre de manière récursive. Mais je n'ai pas de fonction à utiliser en particulier. Si vous avez d'autres solutions pourquoi pas...

    Voilà ma fonction qui parcourt tout l'arbre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public void lire()
    {
    	XmlDocument doc=new XmlDocument();
    	doc.Load(fichier);
    	lireRecursif(doc.ChildNodes[1]);
    }
     
    private void lireRecursif(XmlNode noeud)
    {
     
    	foreach (XmlNode n in noeud.ChildNodes)
    		lireRecursif(n);
    }
    Voilà pour les précisions !

  4. #4
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Une solution :
    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
    public void lister()
    {
    	XmlDocument doc=new XmlDocument();
    	doc.Load(fichier);
    	listerRecursif(doc.ChildNodes[1],"");
    }
     
    private void listerRecursif(XmlNode noeud,string Chemin)
    {
      Chemin=Chemin+NomDuNoeud(noeud));
      if (noeud.ChildNodes.Count==0) AjouterChemin(Chemin) ;
      else foreach (XmlNode n in noeud.ChildNodes) ListerRecursif(n,Chemin) ;
    }
     
    private string NomDuNoeud(XmlNode noeud)
    // ... => renvoie "A", "B", ... "Y" suivant le noeud
     
    private void AjouterChemin(string Chemin)
    // ... => ajoute un chemin (exemples : ABDX ou ABE) au tableau

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 82
    Par défaut
    Avec quelque chose du genre tu devrais pouvoir te débrouiller
    J'ai mis comme exemple n.name je ne suis pas certain de la valeur que tu veux mettre.
    Mais ton code final devrait ressembler à ça en gros.

    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
     
    public void lire()
    {
    	XmlDocument doc=new XmlDocument();
    	doc.Load(fichier);
    	String Retour = lireRecursif(doc.ChildNodes[1],doc.ChildNodes[1].name);
    }
     
    private String lireRecursif(XmlNode noeud,String Parent)
    {
     
    	foreach (XmlNode n in noeud.ChildNodes)
    		lireRecursif(n,Parent+n.name);
            return Parent + n.name.ToString() +";";
    }

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 43
    Par défaut
    Merci beaucoup pour vos réponses !!!

  7. #7
    Membre confirmé
    Inscrit en
    Mars 2007
    Messages
    96
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 96
    Par défaut
    Juste une précision:
    vaut mieux utiliser
    que

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

Discussions similaires

  1. parcours arbre xml
    Par frAydjwe dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 16/05/2011, 18h17
  2. [XSLT] parcours de deux branche d'un arbre XML et cumul de montant
    Par meurdock56 dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 06/04/2007, 17h21
  3. [XSLT] style du texte, parcours arbre XML
    Par helter_skelter dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 28/11/2006, 23h10
  4. [JSTL] Problème de parcours d'arbre en XML
    Par slashmax dans le forum Taglibs
    Réponses: 1
    Dernier message: 04/12/2005, 17h13

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