特定の属性を持つ兄弟の属性のリストを取得しようとしていqux
ます。この場合x
は、属性foo
とその兄弟のy
属性foo
です。
//node[@foo="x" and following-sibling::node[@foo="y"]]/@qux | //node[@foo="y" and preceding-sibling::node[@foo="x"]]/@qux
これによりリストが作成されますが、順序を除いて、両方のパーツを別々に実行して一緒に追加するのと同じです。両方を並べてリストする必要があるqux
ので、qux
行ごとに2つの要素のリストを作成します。これは、明らかに兄弟が一致する場所です。
これはxpathで実行できますか?もしそうなら、どのように実行しますか?そうでない場合、xqueryはその仕事をしますか?
編集:サンプルファイルと出力:
<database>
<ds version="1">
<node>
<node foo="x" qux="hello"/>
<node foo="y" qux="world"/>
</node>
</ds>
<ds version="1">
<node>
<node>
<node foo="x" qux="another"/>
<node foo="y" qux="sentence"/>
<node foo="y" qux="example"/>
<node foo="z" qux="irrelevant"/>
</node>
</node>
</ds>
<ds version="1">
<node>
<node foo="y" qux="not"/>
<node foo="z" qux="returned"/>
</node>
</ds>
</database>
興味のあるノードの深さはわからないので、//ノードを使う必要があると思います。
クエリは次を返す必要があります。
hello world
another sentence
another example