我有一个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)
你真的想要所有的后代或只是顶级元素吗?如果您只想要顶级的那个,那么使用Elements()方法 - 它返回当前节点下的所有元素.
问题不在于重复节点 - 更高级别的节点包括较低级别的节点.因此,更高级别的节点被返回,那么下级之一,你写出来的整个这两个节点,这意味着你两次写出下级节点.
如果你只是写出你正在查看的节点的名称,你就不会发现问题.但你还没有说出你真正要做的事情,所以我不知道这是否有帮助......