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:
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);
und
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 bearbeiten, im Gegensatz zu jeder anderen XML-API, die ich jemals gesehen habe:
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 ganz 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 eher um In-Memory-APIs als um Streaming-APIs (obwohl dies XStreamingElement
eine verzögerte Ausgabe unterstützt). XmlReader
und XmlWriter
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 ein XmlReader
am Anfang eines Elements positionieren, ein Element daraus lesen XElement
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 .