【问题标题】:xdocument descendantsnodes vs nodesxdocument 后代节点与节点
【发布时间】:2014-03-17 14:12:23
【问题描述】:

我试图了解扩展方法 DescendantsnNodes 和方法“节点”之间的区别 XDocument。

我可以看到 DescendantsNodes 应该返回此文档或元素的所有后代 并且 Nodes 应该返回此文档或元素的所有子节点。

我不明白“所有子节点”和“所有后代”有什么区别。

有人可以澄清一下吗?

【问题讨论】:

    标签: c# linq c#-4.0 linq-to-xml


    【解决方案1】:

    子节点是直接在某个节点(父节点)“下方”的节点。后代将是位于同一节点“下方”的节点,但它也可以是子节点“下方”的多个级别。

    子节点将是后代,但后代并不总是子节点。

    Eg: <Parent><Child1 /><Child2><AnotherNode /></Child2></Parent>
    
    -Parent
       |
        --> Child1 (Descendant)
       |   
        --> Child2 (Descendant)
              |
               --> AnotherNode (Descendant, not child)    
    

    用一个小代码示例可能更容易可视化:

    string someXML = "<Root><Child1>Test</Child1><Child2><GrandChild></GrandChild></Child2></Root>";
    
    var xml = XDocument.Parse(someXML);
    
    Console.WriteLine ("XML:");
    Console.WriteLine (xml);
    
    Console.WriteLine ("\nNodes();\n");
    
    foreach (XNode node in xml.Descendants("Root").Nodes())
    {
        Console.WriteLine ("Child Node:");
        Console.WriteLine (node);
        Console.WriteLine ("");
    }
    
    Console.WriteLine ("DescendantNodes();\n");
    
    foreach (XNode node in xml.Descendants("Root").DescendantNodes())
    {
        Console.WriteLine ("Descendent Node:");
        Console.WriteLine (node);
        Console.WriteLine ("");
    }
    

    生产:

    XML:
    
    <Root>
      <Child1>Test</Child1>
      <Child2>
        <GrandChild></GrandChild>
      </Child2>
    </Root>
    
    Nodes();
    
    Child Node:    
    <Child1>Test</Child1>
    
    Child Node:    
    <Child2>
      <GrandChild></GrandChild>
    </Child2>
    
    DescendantNodes();
    
    Descendent Node:    
    <Child1>Test</Child1>
    
    Descendent Node:    
    Test
    
    Descendent Node:    
    <Child2>
      <GrandChild></GrandChild>
    </Child2>
    
    Descendent Node:
    <GrandChild></GrandChild>
    

    【讨论】:

      【解决方案2】:

      给定

      <root><child><grandchild>foo</grandchild></child></root>
      

      root元素节点有一个子节点,一个child元素节点,但有三个后代节点,分别是child元素节点、grandchild元素节点和foo文本节点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多