2009-03-20 11 views
1

J'utilise C# et LINQ pour parcourir mon document XDocument.LINQ sur XML: trouver le parent de premier niveau

Disons que je XML comme ceci:

<Root> 
    <Element ID="1"> 
    <Element ID="2"> 
     <Element ID="3" /> 
     ... 
    </Element> 
    <Element ID="50"> 
     ... 
    </Element> 
    </Element> 
    <Element ID="x"> 
    ... 
    </Element> 
</Root> 

Maintenant, nous allons dire que j'ai l'ID 3, et parviennent à trouver l'élément avec cet ID. À ce stade, je souhaite trouver l'ID du nœud parent de niveau supérieur (son parent est un niveau inférieur à la racine). Dans ce cas, je veux trouver l'élément avec ID 1. Je peux le faire:

myElement.Parent.Parent

Mais je ne sais pas combien de niveaux jusqu'à ce pourrait être - donc je dois probablement récursion. Cependant, je rappelle que XDocument est en lecture seule. Combien cela coûte-t-il de trouver le parent - récursivement? Quelle est la meilleure façon de procéder?

Mes fichiers XML peuvent être jusqu'à 500 000 pixels.

Répondre

1

Non, XDocument n'est pas en avant uniquement. Pensez-vous à XStreamingElement?

Je crois que le parent est stocké comme un champ dans le cadre de XObject, alors l'aller récursivement est bon marché.

+0

J'ai un livre LINQ ici et il est dit que XNode utilise en interne une liste de liens simples, donc l'appel de PreviousNode est non-performant. Je craignais que Parent soit également non performant. –

+0

Droit - non, je ne crois pas que ce soit le cas. Essayez-le sur le plus gros document que vous êtes susceptible de voir, et chronométrez-le :) –

Questions connexes