2011-09-19 195 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

相關問題