如何使用xpath基于节点值获取属性值

时间:2011-09-19 09:49:02

标签: xml xpath orbeon

我正在处理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表达式。

请帮帮我。

2 个答案:

答案 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]