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

时间:2018-08-03 17:22:14

标签: c# xml

我有一个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 个答案:

答案 0 :(得分:5)

要选择作为根元素的子元素的元素,可以使用xpath:

/root/*

或一般而言:

/*/*

您不应遍历此处的所有后代(//...),因为这将通过文档中的 all 元素。您将不得不添加其他过滤,这将使查询不必要地变得复杂:

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

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

/*/*[not(*)]