たとえば、次のような場合です。
<entries>
...
<entry id="34" weight="83">...</entry>
<entry id="35" weight="21">...</entry>
...
</entries>
なんらかの理由で、IDが35のエントリを取得しますlet $entry := //entry[xs:integer(./@weight)=21]
。前のエントリ(ID 34)を簡単に取得するにはどうすればよいですか?
//entry[xs:integer(@weight)=21]/preceding-sibling::entry[1]
前の兄弟軸は逆方向にカウントされます。[1]
直前の兄弟を示します。
preceding-sibling
結果セットを最後の兄弟に制限するよりも、XPath軸を使用して先行するすべての兄弟をフェッチします。
(//entry[xs:integer(./@weight)=21]/preceding-sibling::*)[last()]
データセットとXQueryの実装によっては、逆の方が速い場合があり<entry/>
ます。条件を満たす要素が後に続く要素を見つけます。
//entry[./following-sibling::*[1][xs:integer(./@weight)=8]]