You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

XQuery多XML文档提取type-id映射表失败,求排查解决

问题分析与解决

你的代码问题出在循环范围和合并时机上:

  • 你在for $singleDoc的循环体内生成并返回每个文档的映射表,最终会输出1000多个独立的map,而非合并后的全局映射。
  • 单个文档内的map:merge完全多余,只是把当前文档的type和id生成entry后又合并,对全局合并没有帮助。
正确实现代码
let $all-entries := 
  for $singleDoc in fn:collection($myURI || "/myFolder/")
  let $doc-id := $singleDoc//id/string()
  return
    for $t in $singleDoc//type/string()
    return map:entry($t, $doc-id)

return map:merge($all-entries, map:merge-options('duplicates', 'combine'))
代码说明
  1. 收集所有键值对:遍历每个文档,先获取当前文档的id,再为文档里的每个type生成一个map:entry(键是type值,值是当前文档的id)。
  2. 全局合并映射:用map:merge把所有entry合并,通过duplicates: combine参数,让同一个type对应的多个id自动合并成序列,正好符合你要的映射格式。

如果你的XML文档里每个<document>只有一个<type>和一个<id>,可以简化代码:

map:merge(
  for $singleDoc in fn:collection($myURI || "/myFolder/")
  return map:entry($singleDoc//type/string(), $singleDoc//id/string()),
  map:merge-options('duplicates', 'combine')
)

内容的提问来源于stack exchange,提问作者Marie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 22:36:13