2009-03-20 5 views
1

Ich verwende C# und LINQ, um mein XDocument zu durchlaufen.LINQ über XML: finden Sie die oberste Ebene

Können sagen, ich XML wie dieses:

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

Lassen Sie uns jetzt sagen, ich habe die ID 3 und verwalten das Element mit dieser ID zu finden. An dieser Stelle möchte ich die ID des obersten Elternknotens finden (dessen Elternteil eine Ebene unterhalb der Wurzel liegt). In diesem Fall möchte ich mit ID das Element finden 1. Ich kann dies tun:

myElement.Parent.Parent

Aber ich weiß nicht, wie viele Ebenen nach oben könnte es sein - so wohl ich brauche Rekursion. Ich erinnere mich jedoch, dass XDocument nur vorwärts gelesen wird. Wie teuer ist es, den Parent rekursiv zu finden? Was ist der beste Weg, dies zu tun?

Meine XML-Dateien könnten bis zu 500k groß sein.

Antwort

1

Nein, XDocument ist nicht vorwärts. Denken Sie an XStreamingElement?

Ich glaube, das Elternteil wird als ein Feld als Teil von XObject gespeichert, so rekursiv zu holen ist billig.

+0

Ich habe ein LINQ-Buch hier und es sagt, dass XNode intern eine einfach verknüpfte Liste verwendet, also PreviousNode aufrufen ist nonperformant. Ich war besorgt, dass Parent auch ähnlich unperformant sein könnte. –

+0

Richtig - nein, ich glaube nicht, dass das der Fall ist. Probieren Sie es auf dem größten Dokument, das Sie wahrscheinlich sehen, und Zeit es :) –

Verwandte Themen