如何使用xpath获取基于节点值的属性值
问题描述:
我正在使用Orbeon窗体,我必须使用Xpath来检索属性值。我的情况如下所述。如何使用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的,它应该回到我的地方找到具有值“真”的下一个节点的属性值。例如,如果我传递id = 1,那么我应该从3后得到结果,下一个节点具有true。请注意,我必须只得到3,而不是3,4和6.
我试过类似下面的东西,但我没有得到预期的结果。
/n/node/page[@id>"1" and .='true']/@id
扩展我的问题:如果我给的最后一个值,并期望有下一个下面有真正的属性值
同一案件应适用。例。如果我给6,XPath表达式应该给我4.我不介意如果我不得不使用另一个xpath表达式。
请帮帮我。
答
我猜你会喜欢@id
更高,以获得第一页比1和内容等到true
。那么下面会做的伎俩:
(/n/node/page[@id>"1" and .='true'])[1]/@id/string()
相比你有什么,挑选“符合第一项......”与(…)[1]
做的,我用/string()
末来获得属性的值。根据您使用此表达式的位置,这不是必需的,因为该属性将转换为您的字符串。
答
尝试使用
/n/node/page[@id>"1" and .='true']/@id[position() < 2]
延长我的答案是:
你也可以使用
/n/node/page[@id>"1" and .='true']/@id[last() - 1]
+0
嗨,感谢您的回复。我不认为postion() Jayy
谢谢Avernet。这一个工作。对于我的问题的第二部分,我使用如下,工作正常。 (/ n/node/page [@id Jayy