Nếu bạn đang sử dụng .NET phiên bản 3.0 trở xuống, bạn phải sử dụng XmlDocument
hay còn gọi là API DOM cổ điển. Tương tự như vậy, bạn sẽ thấy có một số API khác sẽ mong đợi điều này.
Tuy nhiên, nếu bạn có được sự lựa chọn, tôi sẽ khuyên bạn nên sử dụng XDocument
hay còn gọi là LINQ to XML. Việc tạo tài liệu và xử lý chúng đơn giản hơn nhiều . Ví dụ: đó là sự khác biệt giữa:
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);
và
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
Các không gian tên khá dễ làm việc trong LINQ to XML, không giống như bất kỳ API XML nào khác tôi từng thấy:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XML cũng hoạt động thực sự tốt với LINQ - mô hình xây dựng của nó cho phép bạn xây dựng các phần tử với chuỗi các phần tử phụ thực sự dễ dàng:
// 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
));
Đó là tất cả nhiều tuyên bố hơn, phù hợp với phong cách LINQ chung.
Bây giờ như Brannon đã đề cập, đây là các API trong bộ nhớ thay vì phát trực tuyến (mặc dù XStreamingElement
hỗ trợ đầu ra lười biếng). XmlReader
và XmlWriter
là những cách truyền phát XML thông thường trong .NET, nhưng bạn có thể trộn tất cả các API ở một mức độ nào đó. Ví dụ: bạn có thể truyền phát một tài liệu lớn nhưng sử dụng LINQ sang XML bằng cách định vị XmlReader
phần đầu của một phần tử, đọc XElement
từ phần tử đó và xử lý nó, sau đó chuyển sang phần tử tiếp theo, v.v. Có nhiều bài đăng trên blog về kỹ thuật này, Đây là một cái tôi tìm thấy với một tìm kiếm nhanh .