XElement
和XDocument
之间有什么区别?您何时使用它们?
答案 0 :(得分:31)
XDocument代表整个XML文档。它通常由许多元素组成。
XElement表示XML元素(包含属性,子元素等)。它是更大文档的一部分。
在处理XML元素时使用整个XML文档XElement时使用XDocument。
例如 - XElement
具有HasAttributes
属性,指示元素上是否存在任何属性,但XDocument
不存在,因为这样的属性在上下文中是无意义的。整个XML文档。
答案 1 :(得分:17)
这是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
。
答案 2 :(得分:15)
来自MSDN:
请注意,您只需要创建 XDocument对象,如果您需要 由...提供的特定功能 XDocument类。在很多 情况下,你可以直接工作 使用XElement。直接与。合作 XElement是一种更简单的编程 模型。
XDocument派生自XContainer。 因此,它可以包含子节点。 但是,XDocument对象可以有 只有一个子XElement节点。这个 反映了那里的XML标准 可以只是XML中的一个根元素 文档。
答案 3 :(得分:0)
根据MSDN文章LINQ to XML vs. DOM,在小标题&#34;直接使用XML元素&#34;
下使用LINQ to XML时,仅当您要在文档的根级别添加注释或处理指令时才使用XDocument类。