Ich lerne jetzt, XmlDocument
aber ich bin gerade auf etwas gestoßen, XDocument
und wenn ich versuche, den Unterschied oder die Vorteile von ihnen zu suchen, kann ich nichts Nützliches finden. Können Sie mir bitte sagen, warum Sie eines über das andere verwenden würden?
c#
xml
xmldocument
linq-to-xml
Tarik
quelle
quelle
Antworten:
Wenn Sie .NET - Version 3.0 oder niedriger verwenden, Sie haben zu verwenden ,
XmlDocument
auch bekannt als den klassischen DOM - API. Ebenso werden Sie feststellen, dass es einige andere APIs gibt, die dies erwarten.Wenn Sie jedoch die Wahl haben, würde ich die Verwendung von
XDocument
aka LINQ to XML empfehlen . Es ist viel einfacher, Dokumente zu erstellen und zu verarbeiten. Zum Beispiel ist es der Unterschied zwischen:und
Namespaces sind in LINQ to XML ziemlich einfach zu bearbeiten, im Gegensatz zu jeder anderen XML-API, die ich jemals gesehen habe:
LINQ to XML funktioniert auch sehr gut mit LINQ - sein Konstruktionsmodell ermöglicht es Ihnen, Elemente mit Sequenzen von Unterelementen ganz einfach zu erstellen:
Es ist alles viel deklarativer, was zum allgemeinen LINQ-Stil passt.
Wie Brannon bereits erwähnt hat, handelt es sich hierbei eher um In-Memory-APIs als um Streaming-APIs (obwohl dies
XStreamingElement
eine verzögerte Ausgabe unterstützt).XmlReader
undXmlWriter
sind die normalen Methoden zum Streamen von XML in .NET, aber Sie können alle APIs bis zu einem gewissen Grad mischen. Sie können beispielsweise ein großes Dokument streamen, aber LINQ to XML verwenden, indem Sie einXmlReader
am Anfang eines Elements positionieren, ein Element daraus lesenXElement
und verarbeiten und dann zum nächsten Element usw. übergehen. Es gibt verschiedene Blog-Beiträge zu dieser Technik. Hier ist eine, die ich mit einer schnellen Suche gefunden habe .quelle
Ich bin überrascht, dass in keiner der bisherigen Antworten die Tatsache erwähnt wird, dass
XmlDocument
keine Zeileninformationen bereitgestellt werden , während dies derXDocument
Fall ist (über dieIXmlLineInfo
Schnittstelle).Dies kann in einigen Fällen eine wichtige Funktion sein (z. B. wenn Sie Fehler in einer XML-Datei melden oder verfolgen möchten, wo Elemente im Allgemeinen definiert sind), und Sie sollten sich dessen besser bewusst sein, bevor Sie mit der Implementierung beginnen
XmlDocument
, um sie später zu implementieren Entdecken Sie, dass Sie alles ändern müssen.quelle
XDocument
dies Leitungsinformationen liefert. Siehe XDocument.Load withLoadOptions.SetLineInfo
als zweites Argument. Wenn Sie einen Weg kennen, um Leitungsinformationen zu erhalten,XmlDocument
bin ich neugierig; Als ich diese Antwort schrieb, konnte ich keine finden. Diese andere Antwort scheint zu bestätigen: stackoverflow.com/a/33622102/253883XmlDocument
ist ideal für Entwickler, die mit dem XML-DOM-Objektmodell vertraut sind. Es gibt es schon eine Weile und es entspricht mehr oder weniger einem W3C-Standard. Es unterstützt die manuelle Navigation sowie dieXPath
Knotenauswahl.XDocument
Aktiviert die LINQ to XML-Funktion in .NET 3.5. Es ist stark beanspruchtIEnumerable<>
und kann in geradem C # einfacher zu bearbeiten sein.Bei beiden Dokumentmodellen müssen Sie das gesamte Dokument in den Speicher laden (anders
XmlReader
als beispielsweise).quelle
XDocument
ist von der LINQ to XML-API undXmlDocument
ist die Standard-DOM-API für XML. Wenn Sie DOM gut kennen und LINQ to XML nicht lernen möchten, fahren Sie mit fortXmlDocument
. Wenn Sie beide noch nicht kennen, lesen Sie diese Seite , auf der die beiden verglichen werden, und wählen Sie die aus, die Ihnen besser gefällt.Ich habe gerade angefangen, LINQ to XML zu verwenden, und ich mag die Art und Weise, wie Sie ein XML-Dokument mithilfe einer funktionalen Konstruktion erstellen. Es ist sehr schön. DOM ist im Vergleich klobig.
quelle
Wie bereits an anderer Stelle erwähnt, macht Linq to Xml das Erstellen und Ändern von XML-Dokumenten zweifellos zum Kinderspiel
XmlDocument
, und dieXNamespace ns + "elementName"
Syntax sorgt für angenehmes Lesen beim Umgang mit Namespaces.Eine Sache wert für die Erwähnung
xsl
undxpath
sterben Harten zu beachten ist , dass es möglich ist, nach wie vor willkürlich auszuführenxpath 1.0
Ausdrücke auf Linq 2 Xml ,XNodes
indem:und dann können wir mithilfe
xpath
dieser Erweiterungsmethoden navigieren und Daten projizieren :Zum Beispiel angesichts des XML-Dokuments:
Wir können bewerten:
quelle
Beachten Sie außerdem, dass
XDocument
dies in Xbox 360 und Windows Phone OS 7.0 unterstützt wird. Wenn Sie auf sie abzielen, entwickeln Sie fürXDocument
oder migrieren Sie vonXmlDocument
.quelle
Ich glaube, das
XDocument
macht viel mehr Aufrufe zur Objekterstellung. Ich vermute, dass, wenn Sie viele XML-Dokumente verarbeiten,XMLDocument
dies schneller sein wird.Ein Ort, an dem dies geschieht, ist die Verwaltung von Scandaten. Viele Scan-Tools geben ihre Daten aus offensichtlichen Gründen in XML aus. Wenn Sie viele dieser Scandateien verarbeiten müssen, haben Sie meiner Meinung nach eine bessere Leistung
XMLDocument
.quelle