Обновление текстового содержимого узла с использованием Marklogic и XQuery

Считайте, что у меня есть два xmls, xmlA & xmlBи я хочу обновить текстовое содержимое xmlA/abc с xmlB/bcd,

XMLA:

<root>
<abc>texas</abc>
</root>

xmlB:

<root>
<abc>kansas</abc>
</root>

Если я использую xdmp:node-replace(xmlA/abc/text(), xmlB/bcd/text()), узел меняется, а не содержимое узла. Это xmlA:

<root>
<bcd>kansas</bcd>
</root>

Но я хочу изменить только содержимое узла. Желаемый вывод: xmlA:

<root>
<abc>kansas</abc>
</root>

Может кто-нибудь сказать мне, как это сделать (без xpath 3.0)? Спасибо (Ранджан).

2 ответа

Решение

Какую версию MarkLogic вы используете? Я проверил следующее в версии 6.0-1.1, и это, кажется, работает как ожидалось. Когда я извлекаю сохраненные документы после замены узла, я дважды получаю "Канзас", но внутренний элемент "a.xml" остается неизменным:

xdmp:document-insert(
    'a.xml',
    <root>
        <abc>texas</abc>
    </root>
),
xdmp:document-insert(
    'b.xml',
    <root>
        <bcd>kansas</bcd>
    </root>
);

doc('a.xml'),
doc('b.xml');

xdmp:node-replace(
    doc('a.xml')/root/abc/text(),
    doc('b.xml')/root/bcd/text()
);

doc('a.xml'),
doc('b.xml')

Если вы используете старую версию MarkLogic, то это, вероятно, ошибка, исправленная с тех пор..

НТН!

Попробуй это:

xdmp:node-replace(
    xmlA/abc,
    element { "abc" } { xmlB/bcd/text() }
)
Другие вопросы по тегам