Select comment() 在根节点之前

Select comment()'s before root node

这是一种分心变成的痴迷。我在 eXist 中闲逛,决定从文档中获取 comment()。唯一的问题是我们的大部分评论都出现在根节点之前。举个例子

XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- DOCUMENT REVIEWED -->
<doc id="test">
  <figure>
    <figcaption>caption</figcaption>
  </figure>
  <p>blah blah blah</p>
</doc>

XQUERY

xquery version "3.1";
let $col := '/db/project/data'

let $result := <docs> { 
    for $doc in collection($col)/doc
       let $id := string($doc/@id)
       let $figures := count($doc//figures)
       let $comments := ????? 
       return <doc id="{$id}" figurecount="{$figures}">{$comments}</doc>

} </docs>
return $result

现在我已经尝试了几种方法。 ancestor::comment()preceding-sibling,甚至 collection($col)//comment()。我可以在 oXygen 中的 <doc> 之前找到评论,只需 //comment() 即可。

我真的不需要它来做任何具体的事情,但它让我感到困扰,我无法弄清楚。

评论不是 <doc> 文档的后代;它是文档节点的子节点,是 <doc> 的前一个兄弟节点,因此 preceding-sibling::comment() 应该有效。

例如,这是从头开始构建文档的方式:

document {(
  <!-- DOCUMENT REVIEWED -->,
  <doc id="test">
    <figure>
      <figcaption>caption</figcaption>
    </figure>
    <p>blah blah blah</p>
  </doc>
)}

所以您可以 select 从文档节点开始:

doc('my-doc.xml')/comment()

或者如果上下文是 <doc>:

,您可以 select 它的前一个兄弟
doc('my-doc.xml')/doc/preceding-sibling::comment()

在 eXist 中,我认为 collection() 应该 return 一个文档节点,因此您可以直接迭代它,而不是 select 根元素:

for $doc-node in collection($col)
let $comment := $doc-node/comment()
let $id := $doc-node/doc/@id
let $figures := count($doc//figures)
return ...