我的 xml 文件符合以下 DTD:
<!ELEMENT eprints (paper+)>
<!ELEMENT paper (eprintsid,userid,dir,datestamp,type,author+,title)>
<!ELEMENT eprintsid (#PCDATA)>
<!ELEMENT userid (#PCDATA)>
<!ELEMENT dir (#PCDATA)>
<!ELEMENT datestamp (#PCDATA)>
<!ELEMENT type (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ATTLIST author id CDATA #REQUIRED>
从这个 xml 文件中,我想生成与多个 id 值匹配的作者的所有不同值文本节点的列表节点,多个 id 作为子节点。
因此我尝试使用以下 xquery:
let $doc := doc("eprints")
for $i in distinct-values($doc//author)
let $jn := $i/@id
where (count(distinct-values($jn)) > 1)
return <idByAuthor>{$jn}</idByAuthor>
显然 XQuery 不允许我遍历 的 'id' 属性节点$i
,因为我收到以下错误(来自我的 xml 数据库引擎 BaseX):'@id' 需要上下文节点;xs:untypedAtomic 找到。
有谁知道为什么我无法达到的 id 属性$i
?