![](/img/trans.png)
[英]What's the difference between XElement.Load and XDocument.Load?
[英]What's the difference between XElement and XDocument?
XElement
和XDocument
什么区别,你什么时候使用它们?
这是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 :
请注意,如果需要XDocument类提供的特定功能,则只需创建XDocument对象。 在许多情况下,您可以直接使用XElement。 直接使用XElement是一种更简单的编程模型。
XDocument派生自XContainer。 因此,它可以包含子节点。 但是,XDocument对象只能有一个子XElement节点。 这反映了XML标准,即XML文档中只能有一个根元素。
根据MSDN文章LINQ to XML vs. DOM ,在“直接使用XML元素”小标题下:
使用LINQ to XML时,仅当您要在文档的根级别添加注释或处理指令时才使用XDocument类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.