Потеря данных при конвертации XML в JSON В Marklogic - PullRequest
1 голос
/ 22 апреля 2019

Я конвертирую XML в Json, когда дело с данными со смешанным содержимым проигрывает.

У меня есть данные, имеющие элемент "uidlink" внутри элемента "abs", этот элемент повторяется два раза в элементе "abs" до того, как полностью исчезнут вторые данные "uidlink" вместе с "uidlink".

что мне не хватает в пользовательских настройках?

Input

<?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 голосов
/ 27 апреля 2019

Чего вам не хватает, так это того, что «настраиваемая» стратегия не предназначена для этого варианта использования в целом. Одно из упрощений, позволяющих ей создавать «простой вывод json» из произвольного XML, заключается в том, что смешанный контент не обрабатывается ( в совершенстве). Для этой цели разработана «полная» стратегия (полная верность, за счет более подробного и «уродливого» формата).

Если ваши «исключения» из предположений о пользовательской стратегии немногочисленны, вы можете обойти это и посоветовать ему перейти на «полную» стратегию для выбранных имен. Вы можете использовать свойство "full-element-names" в объекте конфигурации, как описано здесь: https://docs.marklogic.com/json:config

полный элемент-имена

Список имен элементов XML, которые будут рассматриваться как полное расширение в JSON, аналогичное полной стратегии. Это могут быть xs: QName или xs: string. Если используется строка xs:, то для создания QName используется пространство имен по умолчанию.

ОБА

(xs: QName | xs: string) *

()

...