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

在MarkLogic 10中用XQuery转子节点为单字符串并保留Title节点

解决MarkLogic混合内容节点转JSON的格式问题

我来帮你搞定这个MarkLogic中XML混合内容转JSON的需求——要把包含文本和子元素的<Title>节点完整转成带HTML结构的_value,其实用xdmp:quote()配合手动构造JSON就能完美解决,具体方案如下:

方案1:手动构造目标JSON结构(最灵活)

直接获取<Title>节点的内部所有内容,用xdmp:quote()转成字符串,再组装成你需要的JSON结构:

let $source-xml := <Title>Header <bold>abc</bold></Title>
return xdmp:to-json(
  object-node {
    "Title": object-node {
      "_value": xdmp:quote($source-xml/node())
    }
  }
)

关键细节解释:

  • $source-xml/node():专门取<Title>的子节点集合(也就是Header 文本和<bold>abc</bold>元素),避免把<Title>标签本身也包含进去
  • xdmp:quote():把这些节点序列转换成完整的字符串形式,保留原有的HTML结构
  • 最终输出的JSON就是你想要的格式:
    {"Title": {"_value": "Header <bold>abc</bold>"}}
    

方案2:全局自定义JSON转换规则

如果你的应用里有大量这类混合内容节点需要统一处理,可以配置MarkLogic的自定义JSON转换规则,让混合内容直接合并成字符串:

let $source-xml := <Title>Header <bold>abc</bold></Title>
let $convert-options := json:config("custom")
let $_ := map:put($convert-options, "mixed-content", "concat")
return xdmp:json-convert($source-xml, $convert-options)

不过要注意,这个规则是全局生效的,会影响所有混合内容节点的转换逻辑,如果只是个别节点需要特殊处理,方案1会更稳妥。

额外提示

如果你的XML带有命名空间,记得在xdmp:quote()里通过namespace参数处理前缀,避免输出不必要的命名空间声明。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:06:51