XElement和XDocument之间有什么区别?

XElementXDocument什么区别,你什么时候使用它们?

XDocument表示整个XML文档。 它通常由许多元素组成。

XElement表示XML元素(具有属性,子元素等)。 它是更大文档的一部分。

在处理XML元素时使用整个XML文档XElement时使用XDocument。

例如 – XElement有一个HasAttributes属性,指示元素上是否存在任何属性,但XDocument不存在,因为这样的属性在整个XML文档的上下文中是没有意义的。

这是msdn的一个实际例子,它清楚地说明了这一点。 假设你在test.xml文件中有这个:

  1 2 3  
  1. 使用XDocument,如果你这样做:

     foreach (var element in XDocument.Load("test.xml").Elements()) Console.WriteLine(element); 

    你得到了这个:

      1 2 3  

    要获取Child1节点的值,您必须执行以下操作:

     var child1 = XDocument.Load("test.xml").Element("Root").Element("Child1").Value; 

    要么

     var child1 = XDocument.Load("test.xml").Root.Element("Child1").Value; 
  2. 使用XElement如果你这样做:

     foreach (var element in XElement.Load("test.xml").Elements()) Console.WriteLine(element); 

    你得到了这个:

     1 2 3 

    要获取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类提供的特定function,则只需创建XDocument对象。 在许多情况下,您可以直接使用XElement。 直接使用XElement是一种更简单的编程模型。

XDocument派生自XContainer。 因此,它可以包含子节点。 但是,XDocument对象只能有一个子XElement节点。 这反映了XML标准,即XML文档中只能有一个根元素。

根据MSDN文章LINQ to XML vs. DOM ,在“直接使用XML元素”小标题下:

使用LINQ to XML时,仅当您要在文档的根级别添加注释或处理指令时才使用XDocument类。