如何编写XPath表达式按条件选取XML文件中首个匹配的子元素
正确选取首个符合field1值条件的entry元素的XPath写法
你当前使用的表达式存在两处核心错误,导致匹配结果不符合预期:
- 相对路径使用错误:
//field1是从整个XML文档的根节点全局搜索所有field1节点,而非匹配当前entry节点下的field1子元素。只要整个文档中存在任意一个值为B的field1节点,所有entry的该过滤条件都会判定为真,因此第一个field1为A的entry也会被纳入结果集。 - 逻辑判断写法错误:
//field1='B' or 'C'的实际运行逻辑等价于(//field1='B') or (boolean('C')),非空字符串'C'的布尔判定结果永远为真,因此该过滤条件对所有entry都成立,自然会返回第一个entry元素。
如果你的需求是选取第一个field1值为B的entry元素,正确的XPath表达式为:/root/entry[field1='B'][1]
如果你后续需要扩展为匹配field1值为B或C的首个entry,正确写法为:/root/entry[field1='B' or field1='C'][1]
上述表达式会先定位到root节点下的所有entry子节点,过滤出子元素field1符合值要求的节点,再从过滤后的结果集中取第一个元素,完全匹配需求。
内容的提问来源于stack exchange,提问作者James Taylor
相关产品推荐
相关产品推荐

