xpath使用同级导航集合中的文档

时间:2019-08-17 15:21:23

标签: xpath xquery

我在变量$data中有1000个TEI文档的集合(请注意:每个文档中最高的节点是tei:TEI)。

在Xpath中(在Xquery中),我可以使用以下命令输出所有@type="example"文档:

let $coll := $data/tei:TEI[@type="example"]
return $coll

然后我可以使用以下方法从上述结果中进一步提取一个文档:

let $coll := $data/tei:TEI[@type="example"]
return $coll[@xml:id="TC0005"]

以上工作正常。

现在,我想获取某个文档之前和之后的文档,我认为可以通过preceding-sibling / following-sibling完成:

let $coll := $data/tei:TEI[@type="example"]
return ($coll[@xml:id="TC0005"]/preceding-sibling[1],
       $coll[@xml:id="TC0005"],
       $coll[@xml:id="TC0005"]/following-sibling[1])

但是以上内容仅返回$coll[@xml:id="TC0005"]的文档。

此语法对于在集合中的文档之间导航是正确的吗?

非常感谢。

1 个答案:

答案 0 :(得分:2)

在文档节点的集合或序列中,您没有任何同级,同级仅存在于每个文档树中,因此我认为您只是希望采用以下形式的位置访问

let $examples := $data/tei:TEI[@type="example"]
for $example at $pos in $examples
where $example/@xml:id = 'TC0005'
return (
  $examples[$pos - 1],
  $example
  $examples[$pos + 1]
)

这是基于我对XQuery和XPath序列的理解,希望它也适用于XQuery数据库中的集合。