You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用纯XPath基于当前节点元素值匹配筛选目标堂兄弟节点

堂兄弟节点动态匹配XPath实现方案

直接使用current()函数即可满足需求,无需硬编码节点位置、无需修改C#代码。

最终可用XPath

替换你代码中占位符部分的完整表达式:

ancestor::Load[1]/Collections/Collection[OrderLoadRef = current()/OrderLoadRef]/LocationID

将C#循环内的取值代码替换为如下内容即可正常运行:

string locationId = order.XPathSelectElement("ancestor::Load[1]/Collections/Collection[OrderLoadRef = current()/OrderLoadRef]/LocationID").Value;

表达式逻辑说明

  • ancestor::Load[1]:从当前Order节点向上查找最近一级的Load祖先节点,不依赖固定父级层级,即使后续XML结构在Load和Orders之间新增嵌套节点也不会失效
  • current():始终指向XPath执行的初始上下文节点(也就是当前循环传入的Order元素),不会随着路径遍历将上下文切换为Collection节点,解决了self轴指向错误的问题
  • 谓词部分通过匹配Collection自身的OrderLoadRef和当前Order的OrderLoadRef,自动筛选出目标Collection节点,取其下LocationID值即可

兼容性说明

你使用的.NET XDocument依赖的System.Xml.XPath库原生支持current()扩展函数,运行后第一个Order节点会返回AAA,第二个Order节点会返回BBB,Collection、Order节点数量可变时也能正常匹配。
如果使用严格遵循W3C XPath 1.0标准、不支持扩展函数的解析器,该需求无法实现:XPath 1.0标准本身未提供在谓词中引用初始上下文节点的语法,谓词内的上下文节点会随路径遍历自动切换,无法跨层级引用初始Order节点的取值。

内容的提问来源于stack exchange,提问作者ginge6000

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:01:08