3 回答

TA貢獻1111條經驗 獲得超0個贊
使用 (/bookstore/book[@location='US'])[1]
這將首先獲得具有location屬性等于'US'的書籍元素。然后它將從該集合中選擇第一個節點。請注意括號的使用,這是某些實現所必需的。
(請注意,這與/bookstore/book[1][@location='US']除非第一個元素碰巧具有該location屬性是不同的)

TA貢獻1946條經驗 獲得超3個贊
/bookstore/book[@location='US'][1] 僅適用于簡單的結構。
添加更多的結構,事情就會中斷。
用
<bookstore>
<category>
<book location="US">A1</book>
<book location="FIN">A2</book>
</category>
<category>
<book location="FIN">B1</book>
<book location="US">B2</book>
</category>
</bookstore>
/bookstore/category/book[@location='US'][1] 產量
<book location="US">A1</book>
<book location="US">B2</book>
不是“第一個匹配更復雜條件的節點”。/bookstore/category/book[@location='US'][2]什么也不返回。
使用括號可以得到原始問題的結果:
(/bookstore/category/book[@location='US'])[1] 給
<book location="US">A1</book>
并按(/bookstore/category/book[@location='US'])[2]預期工作。

TA貢獻1875條經驗 獲得超3個贊
作為對喬納森·芬蘭德答案的解釋:
同一謂詞(
[position()=1 and @location='US']
)中的多個條件必須整體上為真連續謂詞(
[position()=1][@location='US']
)中的多個條件必須一個接一個地成立這意味著
[position()=1][@location='US']
!=[@location='US'][position()=1]
而[position()=1 and @location='US']
==[@location='US' and position()=1]
提示:一個人
[position()=1]
可以縮寫為[1]
你可以建立在謂詞復雜的表達式與布爾運算符“ and
”和“ or
”,并與布爾XPath函數not()
,true()
和false()
。另外,您可以將子表達式括在括號中。
- 3 回答
- 0 關注
- 5475 瀏覽
添加回答
舉報