2011-09-19 197 views
3

我正在使用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表达式。

请帮帮我。

回答

1

我猜你会喜欢@id更高,以获得第一页比1和内容等到true。那么下面会做的伎俩:

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

相比你有什么,挑选“符合第一项......”与(…)[1]做的,我用/string()末来获得属性的值。根据您使用此表达式的位置,这不是必需的,因为该属性将转换为您的字符串。

+0

谢谢Avernet。这一个工作。对于我的问题的第二部分,我使用如下,工作正常。 (/ n/node/page [@id <'6'和。='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] 
+0

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

相关问题