问题描述
在Xquery 3.1中,我试图将XML文档转换为嵌套映射。我的xml文档$keyworddoc
具有以下结构:
<category xml:id="KW0003">
<desc xml:lang="fr">évêque</desc>
<desc xml:lang="en">bishop</desc>
<desc xml:lang="de">Bischof</desc>
<desc xml:lang="es">obispo</desc>
<desc xml:lang="it">vescovo</desc>
</category>
<category xml:id="KW0004">
<desc xml:lang="fr">sacrement</desc>
<desc xml:lang="en">sacrament</desc>
<desc xml:lang="de">Sakrament</desc>
<desc xml:lang="es">sacramento</desc>
<desc xml:lang="it">sacramento</desc>
</category>
<category xml:id="KW0005">
<desc xml:lang="fr">messe</desc>
<desc xml:lang="en">mass</desc>
<desc xml:lang="de">Messe</desc>
<desc xml:lang="es">misa</desc>
<desc xml:lang="it">messa</desc>
</category>
具有所需的地图输出:
map {
"KW0003": map {
"fr": "évêque","en": "bishop","de": "Bischof","es": "obispo","it": "vescovo"},"KW0004": map {
"fr": "sacrement","en": "sacrament","de": "Sakrament","es": "sacramento","it": "sacramento"},"KW0005": map {
"fr": "messe","en": "mass","de": "Messe","es": "misa","it": "messa"},}
但是,我的功能
let $kwdoc := $keyworddoc//tei:category
return map:merge(for $kw in $kwdoc
return map{$kw/data(@xml:id) :
map:merge(for $desc in $kw
return map{$desc/data(@xml:lang) :
$desc/text()}
)})
产生以下错误,表明嵌套的for循环未“看到”变量$kw
?:
Expected single value for key,got 0
edit:eXist 5x中的Xquery。
非常感谢。
解决方法
由于$kw
一次绑定到单个tei:category
元素,所以子句for $desc in $kw
遍历单个元素的序列,并将同一元素绑定到$desc
,因此在这种情况下等效于let $desc := $kw
。
您想要的是遍历tei:desc
的{{1}}个子代:
$kw