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 ...
这是一种分心变成的痴迷。我在 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>
:
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 ...