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

如何在XQuery中将指定XML转换为目标JSON格式?

解决XQuery中fn:xml-to-json报FOJS0006错误的XML转JSON方法

问题背景

你提供的原始XML:

<?xml version="1.0" encoding="UTF-8"?>
<groups>
  <group name="group1" location="city1">Group1</group>
  <group name="group2" location="city2">Group2</group>
</groups>

期望转换为的JSON:

{
  "groups": [
    {
      "name": "group1",
      "location": "city1"
    },
    {
      "name": "group2",
      "location": "city2"
    }
  ]
}

调用fn:xml-to-json(/xml)时触发FOJS0006 xml-to-json: element found in wrong namespace异常,原因是**fn:xml-to-json要求输入XML必须属于特定的JSON映射命名空间(http://www.w3.org/2005/xpath-functions/json)**,普通XML无法直接被该函数解析。


方案1:转换为命名空间规范的XML后再调用xml-to-json

将原始XML重构为符合命名空间要求的结构,明确XML节点与JSON类型的对应关系:

declare namespace json="http://www.w3.org/2005/xpath-functions/json";

let $original-xml := 
  <groups>
    <group name="group1" location="city1">Group1</group>
    <group name="group2" location="city2">Group2</group>
  </groups>

let $json-compatible-xml := 
  <json:map>
    <json:array key="groups">
      {
        for $group in $original-xml/group
        return
          <json:map>
            <json:string key="name" data="{$group/@name}"/>
            <json:string key="location" data="{$group/@location}"/>
          </json:map>
      }
    </json:array>
  </json:map>

return fn:xml-to-json($json-compatible-xml)

方案2:手动构造JSON(更灵活,XQuery 3.1+适用)

利用XQuery的map类型和json:serialize函数直接生成目标JSON,无需依赖特定命名空间:

let $original-xml := 
  <groups>
    <group name="group1" location="city1">Group1</group>
    <group name="group2" location="city2">Group2</group>
  </groups>

let $groups-data := 
  for $group in $original-xml/group
  return map {
    "name": string($group/@name),
    "location": string($group/@location)
  }

return json:serialize(
  map { "groups": $groups-data },
  map { "indent": true() }  // 开启缩进,生成格式化的JSON
)

方案对比

  • 方案1严格遵循W3C的XML-to-JSON映射规范,适合标准化场景;
  • 方案2更直观,完全匹配你的输出需求,且代码可读性更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:21:25