我现在正在学习XmlDocument,但我刚刚遇到XDocument,当我试图搜索它们的差异或好处时,我找不到有用的东西,你能告诉我为什么你会使用一个而不是另一个吗?
当前回答
XmlDocument非常适合熟悉XML DOM对象模型的开发人员。它已经存在了一段时间,或多或少地与W3C标准相对应。它支持手动导航和XPath节点选择。
XDocument支持。net 3.5中的LINQ to XML特性。它大量使用IEnumerable<>,并且更容易在c#中使用。
这两种文档模型都要求将整个文档加载到内存中(例如,与XmlReader不同)。
其他回答
正如在其他地方提到的,毫无疑问,与XmlDocument相比,Linq to Xml使Xml文档的创建和更改变得轻而易举,并且XNamespace ns + "elementName"语法在处理名称空间时使阅读变得愉快。
对于xsl和xpath顽固分子来说,值得一提的一点是,在Linq 2 Xml xnode上仍然可以执行任意的xpath 1.0表达式,包括:
using System.Xml.XPath;
然后我们可以通过这些扩展方法使用xpath导航和投影数据:
XPathSelectElement -单个元素 XPathSelectElements -节点集 XPathEvaluate -标量和其他
例如,给定Xml文档:
<xml>
<foo>
<baz id="1">10</baz>
<bar id="2" special="1">baa baa</bar>
<baz id="3">20</baz>
<bar id="4" />
<bar id="5" />
</foo>
<foo id="123">Text 1<moo />Text 2
</foo>
</xml>
我们可以评估:
var node = xele.XPathSelectElement("/xml/foo[@id='123']");
var nodes = xele.XPathSelectElements(
"//moo/ancestor::xml/descendant::baz[@id='1']/following-sibling::bar[not(@special='1')]");
var sum = xele.XPathEvaluate("sum(//foo[not(moo)]/baz)");
到目前为止,没有一个答案提到XmlDocument不提供行信息,而XDocument提供行信息(通过IXmlLineInfo接口),这让我感到惊讶。
在某些情况下,这可能是一个关键的特性(例如,如果您想报告XML中的错误,或者跟踪元素的一般定义位置),在愉快地开始使用XmlDocument实现之前,您最好了解这一点,以免稍后发现必须全部更改。
XmlDocument非常适合熟悉XML DOM对象模型的开发人员。它已经存在了一段时间,或多或少地与W3C标准相对应。它支持手动导航和XPath节点选择。
XDocument支持。net 3.5中的LINQ to XML特性。它大量使用IEnumerable<>,并且更容易在c#中使用。
这两种文档模型都要求将整个文档加载到内存中(例如,与XmlReader不同)。
另外,请注意XDocument在Xbox 360和Windows Phone OS 7.0中是受支持的。 如果您以它们为目标,则为XDocument开发或从XmlDocument迁移。
我相信XDocument进行了更多的对象创建调用。我认为在处理大量XML文档时,XMLDocument会更快。
这种情况发生在管理扫描数据时。许多扫描工具以XML格式输出数据(原因很明显)。如果必须处理大量这样的扫描文件,我认为使用XMLDocument会有更好的性能。
推荐文章
- 我如何使一个方法的返回类型泛型?
- 何时处理CancellationTokenSource?
- 如何获取正在执行的程序集版本?
- AutoMapper vs valueinjector
- 为什么控制台不。Writeline,控制台。在Visual Studio Express中编写工作?
- 什么是.NET程序集?
- 字符串不能识别为有效的日期时间“格式dd/MM/yyyy”
- 函数应该返回空对象还是空对象?
- 如何转换日期时间?将日期时间
- 如何在c#中连接列表?
- 在c#中引用类型变量的“ref”的用途是什么?
- 防止在ASP中缓存。NET MVC中使用属性的特定操作
- 转换为值类型'Int32'失败,因为物化值为空
- 如何将XML转换成PHP数组?
- c#中有任何连接字符串解析器吗?