C# xdocument子节点节点vs节点

C# xdocument子节点节点vs节点,c#,linq,c#-4.0,linq-to-xml,C#,Linq,C# 4.0,Linq To Xml,我试图理解扩展方法、后代SNNodes和类XDocument的方法“Nodes”之间的区别 我可以看到,子代节点应该返回此文档或元素的所有子代 和节点应返回此文档或元素的所有子节点 我不明白“所有子节点”和“所有子节点”之间有什么区别 有人能澄清一下吗 <root><child><grandchild>foo</grandchild></child></root> foo 根节点元素节点有一个子节点,一个子节点元素节点,

我试图理解扩展方法、后代SNNodes和类XDocument的方法“Nodes”之间的区别

我可以看到,子代节点应该返回此文档或元素的所有子代 和节点应返回此文档或元素的所有子节点

我不明白“所有子节点”和“所有子节点”之间有什么区别

有人能澄清一下吗

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

根节点
元素节点有一个子节点,一个子节点元素节点,但有三个子节点,即
子节点
元素节点、
孙节点
元素节点和
foo
文本节点。

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

子节点将是子节点,但子节点并不总是子节点

Eg: <Parent><Child1 /><Child2><AnotherNode /></Child2></Parent>

-Parent
   |
    --> Child1 (Descendant)
   |   
    --> Child2 (Descendant)
          |
           --> AnotherNode (Descendant, not child)    
例如:
-母公司
|
-->Child1(后代)
|   
-->儿童2(后代)
|
-->另一个节点(子节点,非子节点)
使用一个小的代码示例可能更容易可视化:

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 ("");
}
string someXML=“Test”;
var xml=XDocument.Parse(someXML);
Console.WriteLine(“XML:”);
Console.WriteLine(xml);
Console.WriteLine(“\nNodes();\n”);
foreach(xml.subscriptions(“根”).Nodes()中的XNode节点)
{
Console.WriteLine(“子节点:”);
Console.WriteLine(节点);
Console.WriteLine(“”);
}
Console.WriteLine(“后代节点();\n”);
foreach(xml.substands(“根”).substantNodes()中的XNode节点)
{
Console.WriteLine(“子节点:”);
Console.WriteLine(节点);
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>
XML:
试验
节点();
子节点:
试验
子节点:
后代节点();
子节点:
试验
子节点:
试验
子节点:
子节点: