XPath bookstore/book[1] 选择 bookstore 下的第一个书籍节点 .
bookstore/book[1]
bookstore
如何选择匹配更复杂条件的第一个节点,例如与 /bookstore/book[@location='US'] 匹配的第一个节点
/bookstore/book[@location='US']
对于前
<input b="demo">
和
(input[@b='demo'])[1]
借助在线xpath tester我正在写这个答案......为了这:
<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 表示选择所有 td 元素,这些元素是他们自己的直接父母的第一个孩子 .但是以下xpath:
(id("t2") / tbody / tr / td)[1]
123
如果xpath很复杂或者多个节点存在相同的xpath,请使用索引获取所需的节点 .
例如:(//书店[@location ='US'])[索引]
您可以给出您想要的节点号 .
/bookstore/book[@location='US'][1] 仅适用于简单的结构 .
/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] 收益率
/bookstore/category/book[@location='US'][1]
<book location="US">A1</book> <book location="US">B2</book>
不是"the first node that matches a more complicated condition" . /bookstore/category/book[@location='US'][2] 什么都不返回 .
/bookstore/category/book[@location='US'][2]
使用括号,您可以获得原始问题的结果:
(/bookstore/category/book[@location='US'])[1] 给出
(/bookstore/category/book[@location='US'])[1]
<book location="US">A1</book>
和 (/bookstore/category/book[@location='US'])[2] 按预期工作 .
(/bookstore/category/book[@location='US'])[2]
使用 (/bookstore/book[@location='US'])[1]
(/bookstore/book[@location='US'])[1]
这将首先获得location属性等于'US'的book元素 . 然后它将从该集合中选择第一个节点 . 请注意某些实现所需的括号的使用 .
(注意这与 /bookstore/book[1][@location='US'] 不同,除非第一个元素也恰好具有该location属性)
/bookstore/book[1][@location='US']
查找第一个英文书籍节点(在整个文档中)的最简单方法,考虑更复杂的结构化xml文件,如:
是xpath表达式: ****/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>
所以鉴于上述情况;你可以选择第一本书
(//book[@location='US'])[1]
这将找到第一个有美国位置的地方 . [A1]
//book[@location='US']
将返回包含位置为US的所有书籍的节点集 . [A1,B1,C2]
(//category/book[@location='US'])[1]
将返回存在于文档中任何位置的类别中的第一个书籍位置US . [B1]
(/bookstore//book[@location='US'])[1]
将返回位于根元素书店下任何位置的第一本位置为US的书;使/ bookstore部分真的多余 . [A1]
直接回答:
将返回书籍元素的第一个节点,其中位置US位于书店[A1]下
顺便提一下,如果你想要,在这个例子中找到第一本不是书店直接子书的美国书:
(/bookstore/*//book[@location='US'])[1]
作为Jonathan Fingland答案的解释:
同一谓词( [position()=1 and @location='US'] )中的多个条件必须为整数
[position()=1 and @location='US']
连续谓词( [position()=1][@location='US'] )中的多个条件必须一个接一个地为真
[position()=1][@location='US']
这意味着 [position()=1][@location='US'] != [@location='US'][position()=1]而 [position()=1 and @location='US'] == [@location='US' and position()=1]
[@location='US'][position()=1]
[@location='US' and position()=1]
提示:单独 [position()=1] 可以缩写为 [1]
[position()=1]
[1]
您可以使用布尔运算符“ and " and " or ”以及布尔XPath函数 not() , true() 和 false() 在谓词中构建复杂表达式 . 另外,您可以将子表达式括在括号中 .
and
or
not()
true()
false()
8 回答
对于前
和
借助在线xpath tester我正在写这个答案......
为了这:
以下xpath:
输出:
由于 1 表示选择所有 td 元素,这些元素是他们自己的直接父母的第一个孩子 .
但是以下xpath:
输出:
如果xpath很复杂或者多个节点存在相同的xpath,请使用索引获取所需的节点 .
例如:(//书店[@location ='US'])[索引]
您可以给出您想要的节点号 .
/bookstore/book[@location='US'][1]
仅适用于简单的结构 .添加更多结构和事情中断 .
同
/bookstore/category/book[@location='US'][1]
收益率不是"the first node that matches a more complicated condition" .
/bookstore/category/book[@location='US'][2]
什么都不返回 .使用括号,您可以获得原始问题的结果:
(/bookstore/category/book[@location='US'])[1]
给出和
(/bookstore/category/book[@location='US'])[2]
按预期工作 .使用
(/bookstore/book[@location='US'])[1]
这将首先获得location属性等于'US'的book元素 . 然后它将从该集合中选择第一个节点 . 请注意某些实现所需的括号的使用 .
(注意这与
/bookstore/book[1][@location='US']
不同,除非第一个元素也恰好具有该location属性)查找第一个英文书籍节点(在整个文档中)的最简单方法,考虑更复杂的结构化xml文件,如:
是xpath表达式: ****
/descendant::book[@location='US'][1]
所以鉴于上述情况;你可以选择第一本书
这将找到第一个有美国位置的地方 . [A1]
将返回包含位置为US的所有书籍的节点集 . [A1,B1,C2]
将返回存在于文档中任何位置的类别中的第一个书籍位置US . [B1]
将返回位于根元素书店下任何位置的第一本位置为US的书;使/ bookstore部分真的多余 . [A1]
直接回答:
将返回书籍元素的第一个节点,其中位置US位于书店[A1]下
顺便提一下,如果你想要,在这个例子中找到第一本不是书店直接子书的美国书:
作为Jonathan Fingland答案的解释:
同一谓词(
[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
" and "or
”以及布尔XPath函数not()
,true()
和false()
在谓词中构建复杂表达式 . 另外,您可以将子表达式括在括号中 .