在Marklogic中将XML转换为JSON时丢失数据

时间:2019-04-22 09:46:23

标签: json marklogic marklogic-9

我正在将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
};

1 个答案:

答案 0 :(得分:0)

您所缺少的是,“自定义”策略通常不是为此用例设计的,它允许从任意XML生成“简单json输出”的一种简化方法是不处理混合内容(完美)。 为此,设计了“完全”策略(完全保真,但代价是更加冗长和“丑陋”)。

如果自定义策略假设的“例外”很少,则可以解决此问题,并建议它为选定的qname切换到“完整”策略。您可以按如下所述在配置对象中使用“完整元素名称”属性:https://docs.marklogic.com/json:config

  

完整元素名称

XML元素名称的列表,与完整策略类似,它将被视为JSON中的完整扩展。这些可以是xs:QName或xs:string。如果使用xs:string,则使用默认名称空间来构造QName。

两者

(xs:QName | xs:string)*

()