这是一种分心转向的痴迷。我在eXist中搞砸了,决定从文档中获取comment()
。唯一的问题是我们的大多数评论都来自根节点。我们来举个例子
<?xml version="1.0" encoding="UTF-8"?>
<!-- DOCUMENT REVIEWED -->
<doc id="test">
<figure>
<figcaption>caption</figcaption>
</figure>
<p>blah blah blah</p>
</doc>
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()
即可。
我并不是真的需要这个具体的任何东西,但它让我烦恼,我无法弄明白。
答案 0 :(得分:2)
评论不是<doc>
文件的后代;它是文档节点的子节点,它是<doc>
的前一个兄弟节点,因此preceding-sibling::comment()
应该有效。
例如,这就是从头开始构建文档的方式:
document {(
<!-- DOCUMENT REVIEWED -->,
<doc id="test">
<figure>
<figcaption>caption</figcaption>
</figure>
<p>blah blah blah</p>
</doc>
)}
所以你可以从文档节点开始选择它:
doc('my-doc.xml')/comment()
如果上下文为<doc>
,您可以选择其前一个兄弟:
doc('my-doc.xml')/doc/preceding-sibling::comment()
在eXist中,我认为collection()
应该返回一个文档节点,因此您可以直接迭代它,而不是选择根元素:
for $doc-node in collection($col)
let $comment := $doc-node/comment()
let $id := $doc-node/doc/@id
let $figures := count($doc//figures)
return ...