XPath:匹配 'bar' 的 'foo' 个后代,但如果 'quux' 介于两者之间则不匹配
XPath: match 'foo' descendants of 'bar', but not if 'quux' is in between
在 XPath(仅限 1.0,拜托)中是否有可能找到 'bar' 的所有 'foo' 个后代,在 中的任何级别都没有 '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
或低于 foo
的实例应该 而不是 阻止匹配,即这些 'foo's 应该匹配:
<bar><foo><quux/></foo></bar>
<quux><bar><foo/></bar></quux>
bar/not(quux)/foo
不起作用,因为它只接受三级结构。任何带有 //
的东西都会让 quux 在那个时候溜走。 bar//foo[not(ancestor::quux)]
几乎 有效,但当 quux 是 bar 的祖先时失败。
一种表达你想要的方式是 foo
的 quux
祖先的数量与 foo
的 quux
祖先的数量相同s bar
祖先,因此所有 quux
都是 bar
和 foo
.
的祖先
下面的表达式将select这样foo
s:
//bar//foo[count(./ancestor::quux) = count(./ancestor::bar/ancestor::quux)]
在 XPath(仅限 1.0,拜托)中是否有可能找到 'bar' 的所有 'foo' 个后代,在 中的任何级别都没有 '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
或低于 foo
的实例应该 而不是 阻止匹配,即这些 'foo's 应该匹配:
<bar><foo><quux/></foo></bar>
<quux><bar><foo/></bar></quux>
bar/not(quux)/foo
不起作用,因为它只接受三级结构。任何带有 //
的东西都会让 quux 在那个时候溜走。 bar//foo[not(ancestor::quux)]
几乎 有效,但当 quux 是 bar 的祖先时失败。
一种表达你想要的方式是 foo
的 quux
祖先的数量与 foo
的 quux
祖先的数量相同s bar
祖先,因此所有 quux
都是 bar
和 foo
.
下面的表达式将select这样foo
s:
//bar//foo[count(./ancestor::quux) = count(./ancestor::bar/ancestor::quux)]