【发布时间】:2011-04-22 05:55:35
【问题描述】:
XElement 和 XDocument 之间有什么区别,您什么时候使用它们?
【问题讨论】:
-
This MSDN link 让我们清楚地了解查询 XDocument 与查询 XElement。
XElement 和 XDocument 之间有什么区别,您什么时候使用它们?
【问题讨论】:
【讨论】:
Load methods。
来自MSDN:
请注意,您只需创建 XDocument 对象,如果您需要 提供的特定功能 XDocument 类。在许多 情况下,可以直接工作 与 XElement。直接合作 XElement 是一个更简单的编程 型号。
XDocument 派生自 XContainer。 因此,它可以包含子节点。 但是,XDocument 对象可以有 只有一个子 XElement 节点。这 反映了那里的 XML 标准 只能是 XML 中的一个根元素 文件。
【讨论】:
这是来自msdn 的一个实际示例,它说明了这一点。假设你在 test.xml 文件中有这个:
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
使用 XDocument 如果您这样做:
foreach (var element in XDocument.Load("test.xml").Elements())
Console.WriteLine(element);
你拿回来了:
<Root>
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
</Root>
要获取Child1 节点的值,您必须执行以下操作:
var child1 = XDocument.Load("test.xml").Element("Root").Element("Child1").Value;
或者
var child1 = XDocument.Load("test.xml").Root.Element("Child1").Value;
使用 XElement 如果您这样做:
foreach (var element in XElement.Load("test.xml").Elements())
Console.WriteLine(element);
你拿回来了:
<Child1>1</Child1>
<Child2>2</Child2>
<Child3>3</Child3>
要获取Child1 节点的值,您将执行以下操作:
var child1 = XElement.Load("test.xml").Element("Child1").Value;
简而言之,XElement 会忽略根节点,而XDocument 不会。大致是XDocument.Root = XElement 或XDocument.Root.Elements() = XElement.Elements()。两者都源自XContainer。另一个小的区别是XElement 实现了IXmlSerializable,我认为这并不重要。 XElement 对于您只想查询子节点的绝大多数情况就足够了。不过这个名字让我很困惑,所以我更喜欢使用XDocument。
【讨论】:
根据 MSDN 文章 LINQ to XML vs. DOM,在子标题“直接使用 XML 元素”下:
使用 LINQ to XML 时,仅当您想在文档的根级别添加注释或处理指令时才使用 XDocument 类。
【讨论】: