1

たとえば、次のような場合です。

<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)を簡単に取得するにはどうすればよいですか?

4

2 に答える 2

2
//entry[xs:integer(@weight)=21]/preceding-sibling::entry[1]

前の兄弟軸は逆方向にカウントされます。[1]直前の兄弟を示します。

于 2012-12-25T22:32:41.200 に答える
2

preceding-sibling結果セットを最後の兄弟に制限するよりも、XPath軸を使用して先行するすべての兄弟をフェッチします。

(//entry[xs:integer(./@weight)=21]/preceding-sibling::*)[last()]

データセットとXQueryの実装によっては、逆の方が速い場合があり<entry/>ます。条件を満たす要素が後に続く要素を見つけます。

//entry[./following-sibling::*[1][xs:integer(./@weight)=8]]
于 2012-12-25T22:26:56.877 に答える