请求协助:获取满足Amount='0'条件的PaxID的XPath表达式
正确的XPath查询语句
错误原因分析
- 原表达式路径逻辑错误:
PaxID和Services是同级节点,并非Charge的子节点,无法从Charge节点直接定位到PaxID。 - 未处理XML命名空间:目标XML使用了
a:和b:的命名空间前缀,直接用无前缀的节点名会匹配失败。
解决方案
根据你的XML结构,提供两种可行的XPath表达式:
1. 忽略命名空间(兼容多数环境)
使用local-name()匹配节点名称,无需绑定命名空间:
//*[local-name()='Passenger'][./*[local-name()='Services']/*[local-name()='Charge']/*[local-name()='Amount']='0']/*[local-name()='PaxID']
2. 绑定命名空间(规范写法)
如果你的XPath处理器支持命名空间绑定,先绑定前缀对应的命名空间:
a→ 对应XML中Passengers等节点的命名空间b→charges.radixx.com/v1
然后使用带前缀的XPath:
//a:Passenger[a:Services/b:Charge/b:Amount='0']/a:PaxID
逻辑说明
先定位到包含Amount='0'的Charge节点所属的Passenger父节点,再提取该节点下的PaxID值,完全符合“条件位于PaxID的同级子节点中”的要求。
内容的提问来源于stack exchange,提问作者Lalmani Kashyap
相关产品推荐
相关产品推荐

