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

MarkLogic中json:transform-to-json转换<name>元素为null的问题

MarkLogic json:transform-to-json custom模式下元素转成null的问题解决

问题现象

使用MarkLogic的json:transform-to-json函数并配置custom模式时,XML中的<name>元素被转换为null,其他元素(如<a>)能正常保留文本内容。仅当元素名为<name>时触发该问题,修改为其他名称(如<names>)可正常转换,且同一MarkLogic实例中部分数据库无此异常。

测试代码:

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

let $myxml := <root><a>some text</a><name>some other text</name></root>

let $jsonConfig := json:config("custom")
    
return json:transform-to-json($myxml,$jsonConfig)

实际返回:

{"root": {
"a": "some text", 
"name": null } }

预期返回:

{"root": {
"a": "some text", 
"name": "some other text"
}}

问题原因

MarkLogic的custom模式默认将<name>元素视为用于定义JSON对象键名的特殊元素,而非普通的文本承载元素。当<name>元素仅包含文本内容时,不符合特殊元素的解析逻辑,因此被转换为null。部分数据库无此问题,是因为这些数据库的全局JSON转换配置已修改了<name>元素的处理规则。

解决方案

方案1:在代码中修改JSON配置

通过调整json:config生成的配置对象,移除或重新定义<name>元素的特殊处理规则:

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

let $myxml := <root><a>some text</a><name>some other text</name></root>

let $jsonConfig := json:config("custom")
(: 移除name元素的特殊映射,使其作为普通元素处理 :)
let $jsonConfig := map:remove($jsonConfig, "name")
(: 或者明确指定name元素按文本规则转换 :)
let $jsonConfig := map:put($jsonConfig, "name", json:element-rule("text"))

return json:transform-to-json($myxml,$jsonConfig)

方案2:调整数据库全局JSON配置

登录MarkLogic管理界面,找到目标数据库的配置页,进入JSON选项模块,检查是否存在针对<name>元素的特殊转换规则,将其修改为普通文本元素的处理规则即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 10:55:06