Jika Anda menggunakan .NET versi 3.0 atau lebih rendah, Anda harus menggunakan XmlDocument
alias DOM API klasik. Anda juga akan menemukan beberapa API lain yang akan mengharapkan ini.
Jika Anda mendapatkan pilihan, bagaimanapun, saya benar-benar akan merekomendasikan menggunakan XDocument
alias LINQ ke XML. Jauh lebih mudah untuk membuat dokumen dan memprosesnya. Misalnya, perbedaan antara:
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);
dan
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
Namespaces cukup mudah digunakan di LINQ to XML, tidak seperti API XML lain yang pernah saya lihat:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ ke XML juga bekerja sangat baik dengan LINQ - model konstruksinya memungkinkan Anda untuk membangun elemen dengan urutan sub-elemen dengan sangat mudah:
// 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
));
Semuanya jauh lebih deklaratif, yang cocok dengan gaya LINQ umum.
Sekarang seperti yang disebutkan oleh Brannon, ini adalah API dalam memori dan bukan yang streaming (meskipun XStreamingElement
mendukung output malas). XmlReader
dan XmlWriter
merupakan cara normal streaming XML dalam .NET, tetapi Anda dapat mencampur semua API sampai batas tertentu. Misalnya, Anda dapat melakukan streaming dokumen besar tetapi menggunakan LINQ ke XML dengan memposisikan sebuah XmlReader
di awal elemen, membaca XElement
dari dan memprosesnya, kemudian pindah ke elemen berikutnya dll. Ada berbagai posting blog tentang teknik ini, inilah yang saya temukan dengan pencarian cepat .