1

文件结构:

<program>
 <projectionDay>
   <projection/>
   <projection/>
 </projectionDay>
 <projectionDay>
   <projection/>
   <projection/>
 </projectionDay>
</program>

我想选择第一个和最后一个投影(在整个文档中)。

这将返回它:

/descendant::projection[position() = 1 or position() = last()]

这将在projectionDay内返回第一个和最后一个

//projection[position() = 1 or position() = last()]

为什么呢?

4

1 回答 1

5

您的第一个查询使用descendant获取所有<projection/>元素,然后过滤此结果集的第一个和最后一个元素:

/descendant::projection[position() = 1 or position() = last()]

//是 的缩写/descendant-or-self::*/。所以你的第二个查询实际上意味着

/descendant-or-self::*/projection[position() = 1 or position() = last()]

它查看所有元素(此处: each <projectionDay/>,并返回此元素<projection/>中的第一个和最后一个元素。


要返回所有 s 的第一个和最后一个元素<projeectionDay/>,请将谓词之前的所有内容放入括号中:

(/descendant-or-self::*/projection)[position() = 1 or position() = last()]

或缩写:

(//projection)[position() = 1 or position() = last()]
于 2013-05-09T17:59:16.450 回答