鉴于此XML:
<foos>
<foo>
<name>Apple</name>
<rank>1</rank>
<key>asdfasdfasdf</key>
</foo>
<foo>
<name>Orange</name>
<rank>3</rank>
<key>qwerqwtwetqw</key>
</foo>
<foo>
<name>Apple</name>
<rank>2</rank>
<key>zxcvzxvcxzb</key>
</foo>
...
</foos>
我试图找到具有特定名称的foo的关键,让我们说“Apple”,其中排名最高。我正在使用以下xpath表达式(缺少max函数的解决方法):
/foos/foo[name='Apple' and rank >= /foos/foo[name='Apple']/rank]/key/text()
然而,我有时会得到多个结果,即使每个名称 - 等级组合都是唯一的。我在哪里错了?
这在Java中使用 - 如果结果相关,我可以发布整个代码。
答案 0 :(得分:2)
试试这个:
/foos/foo[name='Apple'][not(preceding-sibling::foo[name='Apple']/rank>./rank) and not(following-sibling::foo[name='Apple']/rank>./rank)]/key/text()
答案 1 :(得分:1)
刚想通了:
/foos/foo[name='Apple' and not(rank < /foos/foo[name='Apple']/rank)]/key/text()
这是必要的,因为测试的右侧对于/foos/foo[name='Apple']/rank
返回的任何值都是正确的,所以旧版本选择了等级大于或等于的任何“Apple”foo任何其他“Apple”foo。