我正在处理Orbeon表单,我必须使用Xpath来检索属性值。我的方案如下所述。
我有一个xml节点,如下所示。
<n>
<node>
<page id='1'>true</page>
<page id='2'>false</page>
<page id='3'>true</page>
<page id='4'>true</page>
<page id='5'>false</page>
<page id='6'>true</page>
</node>
</n>
现在,当我将任何属性值传递给xpath时,它应该返回属性值,在那里找到值为“true”的下一个节点。例如,如果我传递id = 1,那么我应该得到结果为3,因为之后,下一个节点为true。请注意我必须只有3而不是3,4和6。
我尝试了类似下面的内容,但我没有得到预期的结果。
/n/node/page[@id>"1" and .='true']/@id
扩展我的问题:
如果我给出最后一个值并且期望下一个属性值为true,则应该适用相同的情况。例。如果我给6,xpath表达式应该给我4.我不介意我是否必须使用另一个xpath表达式。
请帮帮我。
答案 0 :(得分:1)
我想收到你希望获得@id
高于1且内容等于true
的第一页。然后以下将解决这个问题:
(/n/node/page[@id>"1" and .='true'])[1]/@id/string()
与您所拥有的相比,选择“匹配的第一个项目...”是使用(…)[1]
完成的,我在末尾使用/string()
来获取属性的值。根据您使用此表达式的位置,这不是必需的,因为属性将转换为您的字符串。
答案 1 :(得分:0)
尝试使用
/n/node/page[@id>"1" and .='true']/@id[position() < 2]
扩展我的回答:
您也可以使用
/n/node/page[@id>"1" and .='true']/@id[last() - 1]