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

Posted

技术标签:

【中文标题】C#获取xml文档中的所有节点但忽略嵌套节点【英文标题】:C# Get all nodes in xml document but ignoring nested nodes 【发布时间】:2018-08-03 17:22:13 【问题描述】:

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

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

/root/*

或一般来说:

/*/*

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

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

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

/*/*[not(*)]

【讨论】:

太棒了!!那行得通。时间允许时会接受答案。

以上是关于C#获取xml文档中的所有节点但忽略嵌套节点的主要内容,如果未能解决你的问题,请参考以下文章

3 尝试使用 C# 删除 XML 节点

C#中取得带前缀的xml文件的节点

C# 获取 XML 节点值

C#在xml文件中指定节点插入节点和属性

求C# 获取xml某个节点值方法

在 C# 中的 XML 中获取上一级父级的节点值