Обновление текстового содержимого узла с использованием 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() }
)