XPath:匹配' foo' ' bar'的后代,但如果' quux'介于两者之间

时间:2018-06-14 20:18:29

标签: xpath xpath-1.0

在XPath中(仅限1.0)可以找到所有' foo' ' bar'的后代没有' quux'在任何级别之间?也就是说,例如,这些“foo”应匹配:

<bar><foo/></bar>
<bar><a><foo/></a></bar>
<bar><a><b><c><d><e><f><g><foo/></g></f></e></d></c></b></a></bar>

但这些不应该:

<bar><quux><foo/></quux></bar>
<bar><a><quux><foo/></quux></a></bar>
<bar><quux><a><foo/></a></quux></bar>
<bar><a><quux><b><foo/></b></quux></a></bar>

高于quux或低于bar的{​​{1}}实例应该阻止匹配,即这些&#39; foo&#39; s 匹配:

foo

<bar><foo><quux/></foo></bar> <quux><bar><foo/></bar></quux> 不起作用,因为它只接受三级结构。任何包含bar/not(quux)/foo的东西都会让quux在此时滑过。 // 几乎可以正常工作,但当quux是bar的祖先时会失败。

1 个答案:

答案 0 :(得分:3)

表达您想要的内容的一种方式是quux的{​​{1}}祖先的数量与foo的{​​{1}}个祖先的数量相同quux {1}}祖先,以便所有foo都是barquux的祖先。

以下表达式将选择此类bar s:

foo