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::*/。したがって、2番目のクエリは実際には

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

すべての要素 (ここでは each ) を調べ、この要素<projectionDay/>の最初と最後の要素を返します。<projection/>


すべての の最初と最後の要素を返すには<projeectionDay/>、述語の前のすべてを括弧で囲みます。

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

または省略:

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