XPath 1.0多子节点匹配:筛选匹配对应var节点的target节点
XPath 1.0 查询匹配对应var节点的target节点
示例XML
<doc> <target> <name>V1</name> <value>3</value> <more>foo</more> </target> <target> <name>V3</name> <value>5</value> <more>bar</more> </target> <var> <name>V1</name> <value>3</value> </var> <var> <name>V2</name> <value>3</value> </var> </doc>
需求
需要查询返回所有存在同一var节点的target节点,要求该var节点的name和value子节点与target的完全匹配。上述示例中应无匹配结果。
原查询问题
原查询语句:
//target[//var/name=name and //var/value=value]
该语句错误地将不同var节点的name和value分开匹配,导致第一个target被误匹配——它匹配了一个var的name和另一个var的value,而非同一var节点的两个属性。
正确的XPath 1.0 查询语句
//target[exists(//var[name=current()/name and value=current()/value])]
解释
- 使用
current()函数引用当前遍历的target节点,确保是和同一个var节点的name、value同时匹配,而非分别匹配不同var的属性。 exists()函数用于判断是否存在符合条件的var节点,只有存在时才返回对应的target节点。
内容的提问来源于stack exchange,提问作者3rady
相关产品推荐
相关产品推荐

