如何使用XPath根据节点值获取属性值

3

我是一名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返回,因为在id = 1之后,下一个具有true的节点是id = 3。请注意,我必须只获取3而不是3、4和6。
我尝试了以下内容,但未获得预期的结果。
/n/node/page[@id>"1" and .='true']/@id

扩展我的问题:

如果我给出最后一个值,并期望下面的属性值为真,应该适用于同一情况。例如,如果我给出6,xpath表达式应该给我4。如果需要,我不介意使用另一个xpath表达式。

请帮助我。

2个回答

1

我了解您想要获取第一页,其中@id大于1且内容等于true。那么以下代码可以实现:

(/n/node/page[@id>"1" and .='true'])[1]/@id/string()

与您之前的情况相比,选择“第一个匹配项…”是使用(…)[1]完成的,我在末尾使用/string()来获取属性的值。根据您在使用此表达式的位置不同,这可能是不必要的,因为该属性将自动转换为字符串。


谢谢Avernet。 这一个奏效了。 对于我问题的第二部分,我使用了以下代码,并且可以正常工作。(/n/node/page[@id<'6' and .='true'])[last()]/@id - Jayy

0

尝试使用

/n/node/page[@id>"1" and .='true']/@id[position() < 2]

扩展我的答案:

你也可以使用

/n/node/page[@id>"1" and .='true']/@id[last() - 1]

嗨,谢谢回复。我认为在这里postion() < 2不是正确的表达式。 - Jayy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接