使用Marklogic和XQuery更新节点的文本内容

时间:2013-01-22 05:33:06

标签: xquery marklogic

考虑我有两个xmls,xmlA& xmlB,我想更新文字内容' xmlA/abcxmlB/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)?谢谢(Ranjan)。

2 个答案:

答案 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,那么它可能是一个已经修复过的错误..

HTH!

答案 1 :(得分:1)

试试这个:

xdmp:node-replace(
    xmlA/abc,
    element { "abc" } { xmlB/bcd/text() }
)