如何编写XPath选取XML指定名称的直接子元素,替代自定义遍历方法?
等效XPath实现方案
你需要的XPath表达式格式为 ./[目标元素名称],将[目标元素名称]替换为你要匹配的直接子元素名即可,和你现有工具函数的逻辑完全等价。
核心逻辑说明
- XPath 中
./指代当前上下文节点,也就是调用SelectSingleNode方法的owner元素本身 - 直接跟随在
./后的元素名默认匹配当前节点的第一层级子元素,不会递归检索更深层的后代同名节点,和你写的遍历逻辑完全对齐 SelectSingleNode方法会返回第一个匹配的节点,和你现有函数遍历后返回首个匹配节点的行为一致
使用示例
固定子元素名调用
如果要查找owner下名为User的直接子元素,写法如下:
XmlElement userNode = owner.SelectSingleNode("./User") as XmlElement;
动态封装替换原有工具函数
你可以直接把原工具函数改写为XPath实现:
using System.Xml; static class XmlHelper { public static XmlElement ImmediateChild(XmlElement owner, string name) { return owner.SelectSingleNode($"./{name}") as XmlElement; } }
命名空间适配说明
如果你的XML文档带有自定义命名空间,需要额外传入XmlNamespaceManager才能正确匹配节点,示例如下:
public static XmlElement ImmediateChild(XmlElement owner, string name, string nsPrefix, string nsUri) { XmlNamespaceManager nsmgr = new XmlNamespaceManager(owner.OwnerDocument.NameTable); nsmgr.AddNamespace(nsPrefix, nsUri); return owner.SelectSingleNode($"./{nsPrefix}:{name}", nsmgr) as XmlElement; }
内容的提问来源于stack exchange,提问作者rpaulin56
相关产品推荐
相关产品推荐

