Если вы используете .NET версии 3.0 или ниже, у вас есть , чтобы использовать XmlDocument
или классический DOM API. Также вы обнаружите, что есть другие API, которые ожидают этого.
Однако, если у вас есть выбор, я бы настоятельно рекомендовал использовать XDocument
aka LINQ to XML. намного проще создавать документы и обрабатывать их. Например, это разница между:
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);
и
XDocument doc = new XDocument(
new XElement("root",
new XAttribute("name", "value"),
new XElement("child", "text node")));
Пространства имен довольно просты в работе с LINQ to XML, в отличие от любого другого API XML, который я когда-либо видел:
XNamespace ns = "http://somewhere.com";
XElement element = new XElement(ns + "elementName");
// etc
LINQ to XML также очень хорошо работает с LINQ - его модель построения позволяет очень легко создавать элементы с последовательностями подэлементов:
// 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
));
Все это гораздо более декларативно, что вписывается в общий стиль LINQ.
Теперь, как упомянул Браннон, это API-интерфейсы в памяти, а не потоковые (хотя XStreamingElement
поддерживает отложенный вывод). XmlReader
и XmlWriter
являются обычными способами потоковой передачи XML в .NET, но вы можете в некоторой степени смешать все API. Например, вы можете транслировать большой документ, но использовать LINQ to XML, поместив XmlReader
в начале элемента, прочитав из него XElement
и обработав его, затем перейдя к следующему элементу и т. Д. в блогах об этой технике вот что я нашел с помощью быстрого поиска .