2013-12-23 12 views
5

Betrachten Sie die folgende xml:Parse nur einen Teil der xml

<?xml version="1.0" encoding="utf-8" ?> 
<Outer> 
    <Inner1>ABC</Inner1> 
    <Inner2>DEF</Inner2> 
</Outer> 

I Inner1 ‚s-Wert zu erhalten ("ABC") in der Lage sein wollen, ohne das gesamte Dokument Parsen. Dies liegt daran, dass das Dokument in der Realität ziemlich lang sein könnte. Gibt es eine Möglichkeit, dies zu tun mit. NET (XDocument. Im Gegensatz zum manuellen Parsen es)?

Antwort

7

können Sie verwenden XmlReader, es analysieren nicht das gesamte Dokument, sondern bietet nur vorwärts Zugang durch ein Dokument (ähnlich dem SAX-Parser):

http://msdn.microsoft.com/en-us/library/system.xml.xmlreader(v=vs.110).aspx


So etwas wie die folgenden , Ich denke:

using (XmlReader reader = XmlReader.Create("sample.xml")) { 

    // Move the reader to the inner1 node 
    reader.MoveToContent(); 
    reader.ReadToDescendant("Inner1"); 

    return reader.ReadElementContentAsString(); 
} 
+0

Sieht vielversprechend aus. Ich untersuche es jetzt. – ispiro

+0

Das ist, was ich gesucht habe, also akzeptiere ich die Antwort. Vielen Dank. (Obwohl Ihr Beispiel "" als "Wert" hat, wenn ich es teste. Könnte sein, dass ich es natürlich falsch teste.) – ispiro

+1

Es funktionierte, als ich 'reader.ReadElementContentAsString(); '. (Good ol 'intellisense :)) Nochmals vielen Dank. – ispiro

1

Sie müssen alles bis zu den Daten analysieren, die Sie suchen und extrahieren möchten. Wenn Sie jedoch einen XmlReader verwenden, können Sie den Parsing-Vorgang abbrechen, sobald Sie das finden, was Sie benötigen. Mit XmlDocument hingegen müssen Sie das gesamte Dokument laden, bevor Sie mit der Suche beginnen können.