XElement和XDocument之间有什么区别?

Ran*_*ana 30 .net c# xml vb.net

XElementXDocument每个人之间的区别是什么?

Ode*_*ded 32

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

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

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

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


Ken*_*art 17

来自MSDN:

请注意,如果需要XDocument类提供的特定功能,则只需创建XDocument对象.在许多情况下,您可以直接使用XElement.直接使用XElement是一种更简单的编程模型.

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


naw*_*fal 17

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

<Root>
    <Child1>1</Child1>
    <Child2>2</Child2>
    <Child3>3</Child3>
</Root>
Run Code Online (Sandbox Code Playgroud)
  1. 使用XDocument,如果你这样做:

    foreach (var element in XDocument.Load("test.xml").Elements())
        Console.WriteLine(element);
    
    Run Code Online (Sandbox Code Playgroud)

    你得到了这个:

    <Root>
        <Child1>1</Child1>
        <Child2>2</Child2>
        <Child3>3</Child3>
    </Root>
    
    Run Code Online (Sandbox Code Playgroud)

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

    var child1 = XDocument.Load("test.xml").Element("Root").Element("Child1").Value;
    
    Run Code Online (Sandbox Code Playgroud)

    要么

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

    foreach (var element in XElement.Load("test.xml").Elements())
        Console.WriteLine(element);
    
    Run Code Online (Sandbox Code Playgroud)

    你得到了这个:

    <Child1>1</Child1>
    <Child2>2</Child2>
    <Child3>3</Child3>
    
    Run Code Online (Sandbox Code Playgroud)

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

    var child1 = XElement.Load("test.xml").Element("Child1").Value;
    
    Run Code Online (Sandbox Code Playgroud)

简而言之,XElement忽略根节点而不是根节点XDocument.粗略地XDocument.Root = XElement,或者XDocument.Root.Elements() = XElement.Elements().两者都来源于XContainer.另一个微小的差别是,XElement农具IXmlSerializable,我不认为重要的居多.XElement对于您只想查询子节点的绝大多数情况都足够了.这个名字让我困惑,所以我更喜欢使用XDocument.