【问题标题】:What's the difference between XElement and XDocument?XElement 和 XDocument 有什么区别?
【发布时间】:2011-04-22 05:55:35
【问题描述】:

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

【问题讨论】:

  • This MSDN link 让我们清楚地了解查询 XDocument 与查询 XElement。

标签: c# .net xml vb.net


【解决方案1】:

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

XElement 表示一个 XML 元素(带有属性、子元素等)。它是较大文档的一部分。

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

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

【讨论】:

【解决方案2】:

来自MSDN

请注意,您只需创建 XDocument 对象,如果您需要 提供的特定功能 XDocument 类。在许多 情况下,可以直接工作 与 XElement。直接合作 XElement 是一个更简单的编程 型号。

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

【讨论】:

    【解决方案3】:

    这是来自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;
      

    简而言之,XElement 会忽略根节点,而XDocument 不会。大致是XDocument.Root = XElementXDocument.Root.Elements() = XElement.Elements()。两者都源自XContainer。另一个小的区别是XElement 实现了IXmlSerializable,我认为这并不重要。 XElement 对于您只想查询子节点的绝大多数情况就足够了。不过这个名字让我很困惑,所以我更喜欢使用XDocument

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-07
        • 2010-10-02
        • 2011-12-12
        • 2010-09-16
        • 2012-03-14
        • 2012-02-06
        相关资源
        最近更新 更多