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

MarkLogic XQuery XML转JSON时title元素值异常问题解决

MarkLogic json:transform-to-json() 转换问题解析与解决

问题1:多子元素导致title内容拼接

原理

MarkLogic默认JSON转换规则中,当父元素(如<title>)包含多个子元素(如<target>)时,会将所有子元素的文本内容直接拼接成一个字符串作为_value字段值。这是因为默认规则未区分多子元素的结构,而是递归提取所有层级的文本节点并合并。单个<target>时仅提取该元素的文本,所以结果符合预期。

解决方案

通过自定义转换规则,控制<title>对多<target>的处理逻辑:

  • 若需将<target>转为JSON数组:
let $config := json:config("custom")
// 配置<title>为数组容器
let $title-rule := json:element-rule("title", map:entry("container", "array"))
// 配置<target>提取文本内容
let $target-rule := json:element-rule("target", map:entry("transform", "text"))
return json:transform-to-json($your-xml-node, 
  $config => json:add-element-rule($title-rule) => json:add-element-rule($target-rule)
)
  • 若仅需保留第一个<target>的内容:
let $config := json:config("custom")
let $title-rule := json:element-rule("title", map:entry("transform", function($node) {
  fn:normalize-space($node/target[1]/text())
}))
return json:transform-to-json($your-xml-node, $config => json:add-element-rule($title-rule))

问题2:格式化XML的换行符被带入JSON

原理

XML格式化时的换行、缩进空格属于空白文本节点,MarkLogic默认转换会保留这些节点内容,因此转换后的_value会包含换行符和多余空格。

解决方案

有两种处理方式:

  1. 预处理XML,去除格式化空白:
// 先将XML序列化为字符串再解析,同时开启strip-space去除多余空白
let $clean-xml := xdmp:unquote(xdmp:quote($your-xml-node), (), "strip-space=all")
return json:transform-to-json($clean-xml)
  1. 在转换规则中修剪文本:
let $config := json:config("custom")
let $title-rule := json:element-rule("title", map:entry("transform", function($node) {
  // normalize-space会去除首尾空白并合并中间空格
  fn:normalize-space($node/text())
}))
return json:transform-to-json($your-xml-node, $config => json:add-element-rule($title-rule))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 01:50:03