XElement
和 XDocument
的区别是什么,何时使用它们?
来自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
。