如何编写XPath表达式选取多个指定XML元素?
XPath多节点联合选取实现方案
给定测试XML结构
<?xml version="1.0" encoding="UTF-8"?> <a> <b> <c>110</c> <d>periodendyear="2019"</d> <e> <f> <code>xyz</code> <value>54</value> </f> </e> <e> <f> <code>xy</code> <value>6</value> </f> </e> </b> </a>
需求
编写XPath表达式,选取所有b元素子树范围内的目标元素,实现类似//b | //f的多节点联合选取效果。
注:示例XML中
a是文档根节点,为b的父元素,b的子树内不存在a节点,如果需要同时选中根节点a,在最终表达式末尾追加| /a即可。
可用写法
1. 全版本兼容写法(支持XPath 1.0,所有解析器通用)
和示例的联合选取逻辑一致,用管道符|拼接多个匹配路径即可:
//b/d | //b//code | //b//value
路径规则说明:
//b/d:匹配所有b节点下的直接子节点d//b//code:匹配所有b节点任意层级后代中的code元素(code嵌套在e>f节点下,不是b的直接子节点,所以用//匹配后代)//b//value:匹配所有b节点任意层级后代中的value元素
2. XPath 2.0及以上版本简化写法
XPath 2.0开始支持单路径内多节点匹配,写法更简洁:
//b/(d, .//code, .//value)
匹配结果
针对给出的示例XML,上述表达式会准确选中以下节点:
- 内容为
periodendyear="2019"的d节点 - 内容为
xyz的code节点 - 内容为
54的value节点 - 内容为
xy的code节点 - 内容为
6的value节点
内容的提问来源于stack exchange,提问作者Mohit
相关产品推荐
相关产品推荐

