Wenn Sie .NET Version 3.0 oder niedriger verwenden, können Sie haben zu verwenden XmlDocument
auch bekannt als die klassische DOM-API. Ebenso werden Sie feststellen, dass es einige andere APIs gibt, die dies erwarten.
Wenn Sie die Wahl haben, würde ich Ihnen jedoch empfehlen, die XDocument
auch bekannt als LINQ to XML. Es ist viel einfacher, Dokumente zu erstellen und zu bearbeiten. Das ist zum Beispiel der Unterschied zwischen:
XmlDocument doc = new XmlDocument();
XmlElement root = doc.CreateElement("root");
root.SetAttribute("name", "value");
XmlElement child = doc.CreateElement("child");
child.InnerText = "text node";
root.AppendChild(child);
doc.AppendChild(root);
et
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
Namespaces sind in LINQ to XML ziemlich einfach zu handhaben, im Gegensatz zu allen anderen XML-APIs, die ich kenne:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XML funktioniert auch sehr gut mit LINQ - sein Konstruktionsmodell ermöglicht es Ihnen, Elemente mit Sequenzen von Unterelementen sehr einfach zu erstellen:
// Customers is a List<Customer>
XElement customersElement = new XElement("customers",
customers.Select(c => new XElement("customer",
new XAttribute("name", c.Name),
new XAttribute("lastSeen", c.LastOrder)
new XElement("address",
new XAttribute("town", c.Town),
new XAttribute("firstline", c.Address1),
// etc
));
Es ist alles viel deklarativer, was zum allgemeinen LINQ-Stil passt.
Wie Brannon bereits erwähnt hat, handelt es sich hierbei um In-Memory-APIs und nicht um Streaming-APIs (obwohl XStreamingElement
unterstützt faule Ausgabe). XmlReader
y XmlWriter
sind die üblichen Methoden für das Streaming von XML in .NET, aber Sie können alle APIs bis zu einem gewissen Grad mischen. Sie können zum Beispiel ein großes Dokument streamen, aber LINQ to XML verwenden, indem Sie eine XmlReader
am Anfang eines Elements, das Lesen einer XElement
und verarbeitet es, dann geht es weiter zum nächsten Element usw. Es gibt verschiedene Blogbeiträge über diese Technik, hier ist eine, die ich bei einer schnellen Suche gefunden habe .
18 Stimmen
Ich frage mich, warum die Dokumentationsabteilung von Microsoft keinen Hinweis oder eine Bemerkung in MSDN veröffentlicht hat, um die Unterschiede zu verdeutlichen oder zu erklären, wann was zu verwenden ist.
1 Stimmen
Einige Informationen auf msdn: msdn.microsoft.com/de-us/library/ . Und eine Frage zur Leistung: stackoverflow.com/questions/4383919/ . Ich persönlich habe es einfacher gefunden, mit LINQ to XML zu arbeiten.