XElement.Load 和 XDocument.Load 有啥区别?

Posted

技术标签:

【中文标题】XElement.Load 和 XDocument.Load 有啥区别?【英文标题】:What's the difference between XElement.Load and XDocument.Load?XElement.Load 和 XDocument.Load 有什么区别? 【发布时间】:2010-12-12 21:27:52 【问题描述】:

如上所述,XElement.LoadXDocument.Load 有什么区别?它们似乎都加载了一个 XML 文件。

【问题讨论】:

【参考方案1】:

不同之处在于XElement 类型表示一个XML 片段,而XDocument 类型表示具有所有关联元数据的整个XML 文档。

话虽如此,但对于大多数简单的情况,您可以互换使用它们。

了解这两种类型在查询中的细微差别很重要,有关这方面的更多信息,我建议您阅读Querying an XDocument vs. Querying an XElement:

当您通过以下方式加载文档时 XDocument.Load,你会注意到 你必须写查询 与您时略有不同 通过XElement.Load加载。

【讨论】:

此外,如果您打算通过 Web 将生成的 XML 发送到某个 Web 服务,建议使用 XDocument。但是你要求.Load,所以这可能不是你的情况。【参考方案2】:

没有多少场景可以 要求您创建一个 XDocument。 相反,您通常可以创建您的 具有 XElement 根节点的 XML 树。 除非你有特殊要求 创建文档(例如, 因为你必须创建处理 顶部的说明和 cmets 级别,否则您必须支持文档 类型),通常更方便 使用 XElement 作为根节点。

直接来自Valid Content of XElement and XDocument Objects。至于 Load 方法...它们都将内容加载到各自的对象中。

【讨论】:

我需要加载/修改/保存一些 InfoPath 表单,它们大量使用了处理指令。在我找到这篇文章并切换到 XDocument 之前,使用 XElement 会产生令人困惑的结果。太好了……谢谢!【参考方案3】:

加载 cmets 时存在差异,在 XElement.Load() 的情况下不会加载 而 XDocument.Load() 也会得到 Comment

因此,在使用 Xlinq 时,我们应该使用 XDocument

【讨论】:

以上是关于XElement.Load 和 XDocument.Load 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

linq to xml

XmlReader 跳过相邻元素

最佳重载方法匹配有一些无效参数 C#

XElement 和 XDocument 有啥区别?

使用 XDocument 和 Linq 读取 XML - 检查元素是不是为 NULL?

如何防止XDocument添加XML版本和编码信息