如何从当前节点提取指定名称的直接子节点(支持递归调用)
提取当前节点的直接指定子节点(排除嵌套后代)并支持递归调用
要实现从任意当前节点中提取指定名称的直接子节点,同时排除嵌套的后代节点,且方法支持递归调用,核心是使用相对路径的XPath表达式:./Member
核心逻辑
./Member 表示选中当前节点的直接子节点中名称为Member的元素:
.代表当前上下文节点,确保路径是相对当前节点的- 没有
//,不会递归查找所有后代,只取直接子节点
对应示例场景验证
针对给出的XML文档:
- 在
<Members>节点调用SelectNodes("./Member"),返回3个直接子节点:Name为A、B、C的<Member> - 在Name为A的
<Member>节点调用,返回2个直接子节点:Name为A、B的<Member> - 在Name为C的
<Member>节点调用,返回1个直接子节点:Name为A的<Member>
对比错误方案
- 用
.//Member会选中当前节点下所有层级的Member(包括嵌套后代),不符合需求 - 用绝对路径
Document/Members/Member只能固定从根节点查找,无法适配不同的当前节点,不支持递归调用
代码示例(C#)
// 假设currentNode是当前操作的节点 XmlNodeList targetNodes = currentNode.SelectNodes("./Member");
内容的提问来源于stack exchange,提问作者oleq
相关产品推荐
相关产品推荐

