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 关注
- 5312 浏览
添加回答
举报