我现在正在学习,XmlDocument但是我碰到了什么XDocument,当我尝试搜索它们的区别或好处时,我找不到有用的东西,您能否告诉我为什么要在另一个上使用?
XmlDocument
XDocument
如果您使用的是.NET 3.0或更低版本, 则 必须使用XmlDocument经典的DOM API。同样,您会发现还有一些其他API会期望这样做。
但是,如果您有选择的话,我将彻底建议使用XDocumentLINQ 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中非常容易使用,这与我见过的任何其他XML API都不一样:
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风格相符。
现在,正如Brannon所提到的那样,这些是内存中的API,而不是流式API(尽管XStreamingElement支持惰性输出)。XmlReader和XmlWriter.NET中流式XML的常规方法一样,但是您可以在一定程度上混合所有API。例如,您可以流式传输大型文档,但可以使用LINQ to XML,方法是将an XmlReader放在元素的开头,XElement从中读取并处理它,然后继续进行下一个元素等。有关此技术的博客文章很多,这是我通过快速搜索发现的。
XStreamingElement
XmlReader
XmlWriter
XElement