XPath bookstore/book[1]选择书店下的第一个图书节点。
如何选择第一个匹配更复杂条件的节点,例如,第一个匹配/bookstore/book[@location='US']的节点
XPath bookstore/book[1]选择书店下的第一个图书节点。
如何选择第一个匹配更复杂条件的节点,例如,第一个匹配/bookstore/book[@location='US']的节点
当前回答
在一个在线xpath测试器的帮助下,我写下了这个答案… :
<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
其他回答
/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 /百科[@location = "美国"][1]yields
<book location="US">A1</book>
<book location="US">B2</book>
而不是“匹配更复杂条件的第一个节点”。/bookstore/category/book[@location='US'][2]无返回值。
用括号你可以得到原来问题的结果:
(/ bookstore / category /百科[@location =”[1]gives US '])
<book location="US">A1</book>
and (/bookstore/category/book[@location='US'])[2]正常工作。
Use:
(/bookstore/book[@location='US'])[1]
这将首先获得位置属性为'US'的book元素。然后它将从该集合中选择第一个节点。注意括号的使用,这是一些实现所需要的。
注意,这与/bookstore/book[1][@location='US']不同,除非第一个元素碰巧也有location属性。
如果在给定的xml上提供了namespace,最好使用这个。
(/*[local-name() ='bookstore']/*[local-name()='book'][@location='US'])[1]
找到第一个英文book节点的最简单的方法(在整个文档中),考虑到更复杂的结构化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>
是xpath表达式:
/descendant::book[@location='US'][1]
如果xpath很复杂,或者有多个节点使用相同的xpath,则使用索引获取所需的节点。
例:
(//bookstore[@location = 'US'])[index]
你可以给出你想要的节点的编号。