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文档中的所有节点但忽略嵌套节点的主要内容,如果未能解决你的问题,请参考以下文章