我正在将XML转换为Json,其中包含混合内容数据的案件正在丢失。
在第二个“ uidlink”数据与“ uidlink”一起完全丢失之前,我有数据在“ abs”元素中包含“ uidlink”元素,该元素在“ abs”元素中重复了两次。
自定义设置中我缺少什么?
输入
<?xml version="1.0" encoding="UTF-8"?>
<abs>We are disconnected [Abs. <uidlink saiss="1917-02">1917A00171</uidlink> The extraordinarily
insightful Nature of Americans study illuminates both .[Abs. <uidlink saiss="1917-08"
>1917A00726</uidlink>]. or example, the insight that nature experiences are so often
intensely social activities, a reminder of a sometimes forgotten key to connecting.</abs>
代码
declare function utils:ConvertXmlToJson($HighLightResponse as item()*) as item()*
{
let $config := json:config("custom")
let $_ := map:put( $config, "whitespace", "ignore" )
let $_ := map:put( $config, "array-element-names", (xs:QName("results"),xs:QName("personName"),xs:QName("affiliationGroup"),xs:QName("Highlight")
,xs:QName("match"),xs:QName("indexTerms"),xs:QName("classification"),xs:QName("foreNames"),xs:QName("treatmentCodes")) )
let $_ := map:put( $config, "camel-case", fn:true())
let $JsonOutput := json:transform-to-json($HighLightResponse, $config)
let $InputJson := xdmp:quote($JsonOutput)
let $Result := fn:replace($InputJson, 'zzz@start', '<highlight>')
let $JsonResult := fn:replace($Result, 'zzz@end', '</highlight>')
return
$JsonResult
};
答案 0 :(得分:0)
您所缺少的是,“自定义”策略通常不是为此用例设计的,它允许从任意XML生成“简单json输出”的一种简化方法是不处理混合内容(完美)。 为此,设计了“完全”策略(完全保真,但代价是更加冗长和“丑陋”)。
如果自定义策略假设的“例外”很少,则可以解决此问题,并建议它为选定的qname切换到“完整”策略。您可以按如下所述在配置对象中使用“完整元素名称”属性:https://docs.marklogic.com/json:config
完整元素名称
XML元素名称的列表,与完整策略类似,它将被视为JSON中的完整扩展。这些可以是xs:QName或xs:string。如果使用xs:string,则使用默认名称空间来构造QName。
两者
(xs:QName | xs:string)*
()