XPath:select具有特定属性的第一个元素
 XPath bookstore/book[1]selectbookstore下的第一本书籍节点。 
 如何select匹配更复杂的条件的第一个节点,例如匹配/bookstore/book[@location='US']的第一个节点 
 使用(/bookstore/book[@location='US'])[1] 
这将首先获得位置属性等于“美国”的图书元素。 然后它将从该组中select第一个节点。 请注意使用一些实现所需的括号。
  (注意这不是/bookstore/book[1][@location='US']除非第一个元素也恰好具有该位置属性) 
  /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] yield 
 <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]按预期工作。 
作为对乔纳森·芬兰的回答的解释:
-  同一个谓词中的多个条件( [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()在谓词中构build复杂expression式。 另外,您可以将子expression式换成圆括号。 
find第一个英文书籍节点(在整个文档中),最简单的方法是考虑更复杂的结构化XML文件,如:
 <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> 
是xpathexpression式:
 /descendant::book[@location='US'][1] 
  <bookstore> <book location="US">A1</book> <category> <book location="US">B1</book> <book location="FIN">B2</book> </category> <section> <book location="FIN">C1</book> <book location="US">C2</book> </section> </bookstore> 
所以鉴于以上; 你可以select第一本书
 (//book[@location='US'])[1] 
这将find第一个任何地方有一个位置美国。 [A1]
 //book[@location='US'] 
将会返回所有位置为US的书籍所设置的节点。 [A1,B1,C2]
 (//category/book[@location='US'])[1] 
将会返回文档中任何位置的类别中存在的第一个图书位置US。 [B1]
 (/bookstore//book[@location='US'])[1] 
将会返回位于根元素书店下的任何位置的第一本书; 使/书店部分真正的冗余。 [A1]
直接回答:
 /bookstore/book[@location='US'][1] 
将返回你书店下的位置美国书籍元素的第一个节点[A1]
顺便说一下,如果你想在这个例子中find第一本不是书店的直接孩子的美国书:
 (/bookstore/*//book[@location='US'])[1] 
 在网上xpathtesting者的帮助下,我正在写这个答案… 
 为了这: 
 <table id="t2"><tbody> <tr><td>123</td><td>other</td></tr> <tr><td>foo</td><td>columns</td></tr> <tr><td>bar</td><td>are</td></tr> <tr><td>xyz</td><td>ignored</td></tr> </tbody></table> 
以下xpath:
 id("t2") / tbody / tr / td[1] 
输出:
 123 foo bar xyz 
 因为1意味着select所有的td元素,这是他们自己的直接父母的第一个孩子。 
 但是下面的xpath: 
 (id("t2") / tbody / tr / td)[1] 
输出:
 123 
如果xpath比较复杂,或者存在多个xpath相同的节点,则使用该索引获取所需的节点。
例如:(//书店[@location ='US'])[index]
你可以给你想要的节点号码。
例如。
 <input b="demo"> 
和
 (input[@b='demo'])[1]