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

如何配置MarkLogic json:transform-to-json跳过XML根元素

解决MarkLogic json:transform-to-json跳过XML根元素的问题

嘿,我完全懂你想要跳过XML根节点、直接把子元素及其后代转成JSON的需求——其实只需要一个小小的调整就能搞定。

解决方案:传递根元素的直接子节点给转换函数

你现在的问题是把整个<root>节点传给了json:transform-to-json,所以函数会把根节点作为JSON的顶级键。只要修改传入的节点为根元素的直接子节点(用$payLoad/*获取),就能得到你想要的结果:

import module namespace json="http://marklogic.com/xdmp/json"
 at "/MarkLogic/json/json.xqy";

let $jsonConfig := json:config("custom")
    => map:with("whitespace","ignore")
    => map:with("array-element-names",'genre')

let $payLoad := 
  <root>
    <name>The Beatles</name>
    <genre>rock</genre>
    <genre>pop</genre>
    <genre>beat</genre>
    <genre>psychedelia</genre>
  </root>

return json:transform-to-json($payLoad/*, $jsonConfig)

为什么这样有效?

$payLoad/*会选中<root>下的所有直接子元素(也就是<name>和所有<genre>节点)。当你把这些节点集合传给转换函数时,MarkLogic的JSON转换器会自动将每个子元素映射为JSON对象的顶级属性,完美匹配你的期望输出:

{
    "name": "The Beatles", 
    "genre": [
        "rock", 
        "pop", 
        "beat", 
        "psychedelia"
        ]
}

如果后续遇到根元素带有命名空间的情况,只需要在选择子节点时加上对应的命名空间前缀即可,比如$payLoad:root/*(前提是已经绑定了对应命名空间)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 18:02:26