2009-03-03 2 views
17

Das .Net-Framework hat jetzt (mindestens) vier verschiedene Methoden zum Lesen einer Xml-Zeichenfolge. Ich habe jedes von XmlDocument, XmlReader, XPath und XElement verwendet, aber welches ist am effektivsten beim Codieren oder während der Ausführung? Ist jeder für eine andere Aufgabe konzipiert, was sind die Vor- und Nachteile?Der effizienteste Weg, Xml zu analysieren


Update: ein XmlReader scheint der schnellste Weg, um XML zu lesen, die mir vernünftig klingen, aber es seine Grenzen hat. Ich würde gerne wissen, ob es einen Leistungsunterschied zwischen XmlDocument und XLinq für den Zugriff auf XML nicht sequentiell gibt.


Update: fand ich einige Beiträge die verschiedenen Methoden zum Laden eines XML-Dokuments zu vergleichen. XmlReader ist der schnellste, es gibt einen unbedeutenden Unterschied zwischen XmlDocument und LINQ to XML, bis Sie ein Dokument mit mehr als 10.000 Knoten laden, wobei LINQ to XML im Vordergrund steht.

Antwort

12

Die drei häufigsten Methoden zu lesen sind:

XmlDocument Es liest die gesamte Datei in einer Baumstruktur, die dann zugegriffen werden kann, XPath oder durch alle Knoten durchsuchen. Es erfordert viel Speicher für sehr große Dateien, da die gesamte XML-Struktur in den Speicher geladen werden muss. Sehr gut und einfach für kleinere Dateien (weniger als ein paar MB).

XmlReader Schnell, aber auch ein echter Schmerz zu verwenden, da es sequenziell ist. Wenn Sie jemals zurückgehen müssen, können Sie nicht, und XML-Struktur sind in der Regel sehr anfällig für unorganisierte Aufträge. Wenn Sie aus einem nicht endenden XML-Stream lesen, ist dies wahrscheinlich die einzige Möglichkeit.

XML-Serialisierer Dies im Grunde alles für Sie, Sie stellen das Stammobjekt Ihres Modells und es erstellt und liest das XML für Sie. Sie haben jedoch fast keine Kontrolle über die Struktur und das Lesen älterer Versionen Ihres Objekts ist ein Schmerz. Das wird also nicht sehr gut für Ausdauer funktionieren.

XDocument und LINQ zu XML Wie Daniel Straight darauf hingewiesen. Aber ich weiß es nicht genug zu kommentieren. Ich lade jeden ein, den Beitrag zu bearbeiten und die fehlenden Informationen hinzuzufügen.


Jetzt schreiben ist eine andere Geschichte. Es ist ein Problem, ein XmlDocument zu verwalten und XmlWriter ist ein Kinderspiel.

Ich würde aus meiner Erfahrung sagen, dass die beste Kombination ist, mit XmlWriter zu schreiben und mit XmlDocument lesen.

4

Der schnellste XmlTextReader wäre. Von MSDN:

"Repräsentiert einen Leser, der schnellen, nicht im Cache gespeicherten, nur vorwärts gerichteten Zugriff auf XML-Daten bietet."

Mehr hier: XmlTextReader Class

Obwohl es wirklich das Problem hängt die „Methode“ zu entscheiden, wäre am apropriate für den Einsatz. Wenn Sie eine XML-Datei nur einmal lesen müssen (z. B. einige globale App-Einstellungen lesen und zwischenspeichern), dann ist XmlTextReader der Gewinner. Aber denken Sie daran, es ist Vorwärts-Leser. Wenn Sie die gesamte XML-Datei suchen/ändern müssen, sollten Sie wahrscheinlich XmlDocument Class verwenden.

+0

-1: 'XmlTextReader' sollte nicht direkt verwendet werden. Verwenden Sie 'XmlReader.Create', um einen' XmlReader' zu erstellen. –

5

Es gibt auch XDocument und LINQ to XML, was ich für die Programmiererzeit mit Abstand am effizientesten finde.

+0

Eine Idee, wie XDocument im Vergleich zu XmlDocument funktioniert? – bstoney

+0

Ich weiß es nicht. Normalerweise behandle ich keine Datensätze, die groß genug sind, um die Leistung zu beeinflussen. –