文件结构:
<program>
<projectionDay>
<projection/>
<projection/>
</projectionDay>
<projectionDay>
<projection/>
<projection/>
</projectionDay>
</program>
Run Code Online (Sandbox Code Playgroud)
我想选择第一个和最后一个投影(在整个文档中).
这会返回它:
/descendant::projection[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
这将在projectionDay中返回第一个和最后一个
//projection[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
您的第一个查询使用descendant获取所有<projection/>元素,然后为第一个和最后一个元素筛选此结果集:
/descendant::projection[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
//是.的缩写/descendant-or-self::*/.所以你的第二个查询实际意味着
/descendant-or-self::*/projection[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
它看起来到所有元素(在这里:每个<projectionDay/>,并返回第一个和最后一个<projection/>元素这个元素里面.
要在所有<projeectionDay/>s 上返回第一个和最后一个元素,请将谓词前的所有内容放入括号中:
(/descendant-or-self::*/projection)[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
或缩写:
(//projection)[position() = 1 or position() = last()]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |