2009-07-09 106 views
4

什麼是XPath找到只有一個節點(無論哪個)具有某個屬性(實際上我對屬性感興趣,而不是節點)。例如,在我的XML中,我有幾個具有lang屬性的標籤。我知道他們都必須具有相同的價值。我只想得到他們中的任何一個。XPath:找到一個屬性節點(並且只有一個)

現在,我這樣做://*[1][@lang]/@lang,但它似乎不能正常工作,原因不明。我試圖讓我把所有的@lang值('en en en ...')連接到任何東西,有時候在我想要的而不是所有的XML中。


編輯:

其實//@lang[1]不能工作,因爲功能position()是在lang屬性存在測試之前調用。所以它總是需要XML中找到的第一個元素。它在當時效果最好,因爲很多次,lang屬性都在根元素上。

回答

6

一些搶斷後,這裏是一個有效的解決方案:

(//@lang)[1] 

括號需要對[1]從屬性名稱分開,否則position()函數應用於屬性的父元素內(這是無用的,因爲在標籤內只能有一個特定名稱的屬性:這就是爲什麼//@lang[2]總是選擇noth荷蘭國際集團)。

2

你試過這個嗎?

//@lang[1] 

here你可以看到一個例子。

+0

不,我沒有!乍一看似乎好多了,我馬上做一個徹底的測試!謝謝。 – glmxndr 2009-07-09 07:25:37

+0

實際上它不能正常工作,它會選擇其父元素中的所有第一個lang元素。 – glmxndr 2009-07-21 08:36:00

1

以下XPath似乎做你想要什麼:

//*[@lang][1]/attribute::lang 
相關問題