文件结构:
<program>
<projectionDay>
<projection/>
<projection/>
</projectionDay>
<projectionDay>
<projection/>
<projection/>
</projectionDay>
</program>
我想选择第一个和最后一个投影(在整个文档中)。
返回它:
/descendant::projection[position() = 1 or position() = last()]
这将在projectionDay中返回第一个和最后一个
//projection[position() = 1 or position() = last()]
为什么呢?
最佳答案
使用descendant
的第一个查询将获取所有<projection/>
元素,然后为第一个和最后一个元素过滤此结果集:
/descendant::projection[position() = 1 or position() = last()]
//
是/descendant-or-self::*/
的缩写。所以您的第二个查询实际上意味着/descendant-or-self::*/projection[position() = 1 or position() = last()]
它会查看所有元素(在这里:每个
<projectionDay/>
,并返回该元素内的第一个和最后一个<projection/>
元素)。要返回所有
<projeectionDay/>
的第一个和最后一个元素,请将谓词之前的所有内容放入括号中:(/descendant-or-self::*/projection)[position() = 1 or position() = last()]
或缩写:
(//projection)[position() = 1 or position() = last()]