2010-06-16 6 views
2

Dans une arborescence, vous pouvez récupérer le niveau d'un élément. J'essaie d'accomplir la même chose avec l'entrée donnée étant un objet.Renvoie le niveau du nœud du fichier XML hiérarchique

Les données XML que je vais utiliser pour cet exemple serait quelque chose comme ce qui suit

<?xml version="1.0" encoding="utf-8" ?> 
<Testing> 
    <Numbers> 
    <Number val="1"> 
     <Number val="1.1"> 
     <Number val="1.1.1"> 
      <Number val="1.1.2" /> 
      <Number val="1.1.3" /> 
      <Number val="1.1.4" /> 
     </Number> 
     </Number> 
     <Number val="1.2" /> 
     <Number val="1.3" /> 
     <Number val="1.4" /> 
    </Number> 
    <Number val="2" /> 
    <Number val="3" /> 
    <Number val="4" /> 
    </Numbers> 
    <Numbers> 
    <Number val="5" /> 
    <Number val="6" /> 
    <Number val="7" /> 
    <Number val="8" /> 
    </Numbers> 
</Testing> 

Celui-ci est kicking mes fesses!

+0

Puisque vous ne l'utilisez System.Xml.Linq et la classe 'XElement', ce n'est pas LINQ to XML. – SLaks

Répondre

5

Vous pouvez récursivité les parents de l'élément, comme celui-ci:

public static int GetLevel(this XObject node) { 
    if (node.Parent == null) return 0; 
    return 1 + node.Parent.GetLevel(); 
} 

Ou, sans récursion:

public static int GetLevel(this XObject node) { 
    int level = 0; 
    while (null != (node = node.Parent)) 
     level++; 

    return level; 
} 
+0

Je viens de remarquer que mon objet d'entrée est en fait une ObservableCollection et ceci rend la syntaxe comme .Parent indisponible. – Ryan

+0

Ensuite, pour quel nœud voulez-vous le parent? – SLaks

+0

Chaque ObservableCollection possède 2 propriétés: Number1 & val. Si Number1.Count> 0 alors Number1 a une ObservableCollection et ainsi de suite. J'espère que cela a plus de sens. J'ai utilisé Xsd2Code pour que cette classe soit créée automatiquement. – Ryan

Questions connexes