如何配置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
相关产品推荐
相关产品推荐

