XElement和XDocument之间有什么区别?

时间:2010-10-07 08:27:04

标签: c# .net xml vb.net

XElementXDocument之间有什么区别?您何时使用它们?

4 个答案:

答案 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>
  1. 使用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;
    
  2. 使用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;
    
  3. 简而言之,XElement忽略了根节点而XDocument没有。粗略地,XDocument.Root = XElementXDocument.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类。