2008-09-05 9 views
1

Je dispose d'un fichier XML dans le format suivant:fonction récursive pour un fichier xml (données hiérarchisées)

<categories> 
    <category id="1"></category> 
    <category id="2"> 
    <category id="3"></category> 
    <category id="4"> 
     <category id="5"></category> 
    </category> 
    </category> 
</categories> 

Quelqu'un peut-il s'il vous plaît me donner quelques indications sur la façon que je pourrais parcourir le fichier en utilisant C#?

+0

Ceci est le plus naturellement fait en utilisant XSLT. –

Répondre

2

Tout d'abord, System.XML fournit d'excellents moyens de travailler avec XML.

Je suppose que vous avez chargé votre XML dans un XMLDocument, ce qui vous permet d'utiliser des sélecteurs XPath, ou simplement de parcourir le DOM.

Quelque chose comme ça marcherait de tout élément de retour au sommet en utilisant récursion:

public XmlNode WalkToTopNode (XmlNode CurrentNode) 
{ 
    if (CurrentNode.ParentNode == null) 
     return CurrentNode; 
    else 
     return WalkToTopNode(CurrentNode.ParentNode); 
} 

En utilisant récursion pour trouver un noeud par ID pourrait être fait un peu comme celui-ci (Note, je tapais ceci dans la zone de texte , il peut être erroné):

public XmlNode GetElementById (string id, XmlNode node) 
{ 
    if (node.Attributes["id"] != null && node.Attributes["id"].InnerText == id) 
    { 
     return node; 
    } 
    else 
    { 
     foreach (XmlNode childNode in node.Children) 
     { 
      return GetElementById(id, childNode); 
     } 
    } 

    return null;  
} 

Cependant, si vous utilisez récursion quand il y a tant de façons de mieux noeuds traversal construit pour System.XML, alors peut-être son temps de repenser votre stratégie.