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

问题描述 投票:1回答:1

我正在将XML转换为Json,其中混合内容数据的案例正在丢失。

我在“abs”元素中有元素“uidlink”的数据,在第二个“uidlink”数据与“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
};
json marklogic marklogic-9
1个回答
0
投票

您缺少的是“自定义”策略通常不是针对此用例设计的 - 允许其从任意XML生成“简单json输出”的简化之一是混合内容未得到处理(完美)。 “完整”策略是为此目的而设计的(完全保真,代价是更冗长和'丑陋'的格式)。

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

全元素名称

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

(xs:QName | xs:string)*

()

© www.soinside.com 2019 - 2024. All rights reserved.