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

标签 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 并忽略任何嵌套值。

在此先感谢您的帮助。

最佳答案

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

/root/*

或者一般来说:

/*/*

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

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

但是,你想过滤掉没有其他子元素的元素,所以你需要添加条件not(*):

/*/*[not(*)]

关于C#获取xml文档中的所有节点但忽略嵌套节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51677413/

相关文章:

c# - 如何摆脱此错误 : not all code paths return a value?

asp.net - 如何在 IIS 7 中更新 FX_schema.xml 文件?

java - 哪些方法可用于从 Java 文件中返回有效和无效的 XML 数据?

PHP addChild 到列表顶部?

c# - C++ 等效于 C# Yield?

C#,容器的火灾事件

c# - 如何在 asp.net MVC 中获取最后保存的(不是最近保存的)行的 ID?

c# - 清除 StringBuilder 对象的当前字符串

java - 解码缩进的 XML 在 Java 7 和 8 中给出不同的结果

python - 如何使用 lxml 从磁盘加载 .xml 文件作为元素树?