调用DescendantNodes而不重复每个节点

par*_*oir 2 c# xml

我有一个xml,我想得到它的所有元素.我尝试通过Descendants()或DescendantNodes()获取这些元素,但是它们都返回了重复的节点

例如,这是我的xml:

<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <FirstElement xsi:type="myType">
    <SecondElement>A</SecondElement> 
  </FirstElement>
</Root>
Run Code Online (Sandbox Code Playgroud)

当我使用这个片段时:

 XElement Elements = XElement.Parse(XML);
 IEnumerable<XElement> xElement = Elements.Descendants();
 IEnumerable<XNode> xNodes = Elements.DescendantNodes();
 foreach (XNode node in xNodes )
 {
     stringBuilder.Append(node);
 }
Run Code Online (Sandbox Code Playgroud)

它给了我两个节点,但重复了<SecondElement>.我知道后代一直叫它的孩子和一个孩子的孩子,但有没有其他方法可以避免它?

然后,这是我的stringBuilder的内容:

<FirstElement xsi:type="myType"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <SecondElement>A</SecondElement> 
</FirstElement>

<SecondElement>A</SecondElement>
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 5

你真的想要所有的后代或只是顶级元素吗?如果您只想要顶级的那个,那么使用Elements()方法 - 它返回当前节点下的所有元素.

问题不在于重复节点 - 更高级别的节点包括较低级别的节点.因此,更高级别的节点被返回,那么下级之一,你写出来的整个这两个节点,这意味着你两次写出下级节点.

如果你只是写出你正在查看的节点的名称,你就不会发现问题.但你还没有说出你真正要做的事情,所以我不知道这是否有帮助......