【问题标题】:XDocument.Descendants() versus DescendantNodes()XDocument.Descendants() 与 DescendantNodes()
【发布时间】:2014-05-24 21:46:36
【问题描述】:

我查看了Nodes() vs DescendantNodes() usages? 以了解.Nodes() 和.DescendantNodes() 之间的区别,但它们之间的区别是什么:

XDocument.Descendants() 和 XDocument.DescendantNodes()?

var xmlDoc = XDocument.Load(@"c:\Projects\Fun\LINQ\LINQ\App.config");        
var descendants = xmlDoc.Descendants();
var descendantNodes = xmlDoc.DescendantNodes();

foreach (var d in descendants)
    Console.WriteLine(d);

foreach (var d in descendantNodes)
    Console.WriteLine(d);

【问题讨论】:

    标签: c# xml linq-to-xml


    【解决方案1】:

    Descendants 仅返回 elements。 DescendantNodes 返回所有 nodes(包括 XComments、XText、XDocumentType 等)。

    考虑以下 xml 以查看差异:

    <root>
      <!-- comment -->
      <foo>
        <bar value="42"/>Oops!
      </foo>  
    </root>
    

    Descendants 将返回 3 个元素(root、foo、bar)。 DescendantNodes 将返回这三个元素,以及 2 个其他节点 - 文本和评论。

    【讨论】:

    • 感谢这个简单但有用的解释!
    【解决方案2】:

    Descendants 只返回后代元素,而DescendantNodes 返回所有类型的节点(元素、属性、文本节点、cmets 等)

    所以Descendants() 等价于DescendantNodes().OfType&lt;XElement&gt;()。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多