在C#中获取XML文档中的所有节点,但忽略嵌套节点。

3

我有一个XML文档,需要迭代所有直接作为父节点的后代节点。

例如,我有以下XML文档

<root>
  <node1>val1</node1>
  <node2>val2</node2>
  <nodes>
    <nestedNode>nestedvalue</nestedNode>
  </nodes>
</root>

我有以下代码,它可以获取所有元素:
XmlNodeList nodes = doc.SelectNodes("//*");

这将返回node1、node2和nestedNode。我只想要node1和node2,忽略任何嵌套的值。

非常感谢您的帮助。

1个回答

5
为了选择作为根元素子元素的元素,您可以使用以下xpath:
/root/*

或者一般地说:
/*/*

在这里不应该遍历所有的后代元素(//...),因为这会遍历整个文档中的所有元素。你需要添加额外的过滤器,这将使查询变得不必要的复杂。

//*[parent::*[not(parent::*)]]

然而,您希望过滤掉没有其他子元素的元素,因此需要添加条件not(*)

/*/*[not(*)]

太棒了!这个方法可行。等有时间了我会接受这个答案。 - Maxqueue

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接