我正在尝试获取具有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
元素的列表,显然是兄弟姐妹匹配的地方。
这可以在 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>
请注意,我感兴趣的节点的深度是未知的,因此(我认为)使用 //node 是必要的。
查询应返回:
hello world
another sentence
another example