Как заменить текст атрибута для определенного элемента в marklogic - PullRequest
0 голосов
/ 16 октября 2019

Вот как выглядит мой custom_1.xml:

<customer>
    <name>Customer 1</name>
    <productsPurchased count="2">
        <product>one</product>
        <product>two</product>
    </productsPurchased>
</customer>

Я хочу заменить атрибут count="2" на значение 4, чтобы xml стал:

<customer>
    <name>Customer 1</name>
    <productsPurchased count="4">
        <product>one</product>
        <product>two</product>
    </productsPurchased>
</customer>

Как мне добиться этого с помощью xdmp:node-replace? Я попытался использовать:

xdmp:node-replace(fn:doc("custom_1.xml")/customer/productsPurchased/@count, text { "4" } )

Но это выдает ошибку: attribute nodes cannot be replaced with text nodes

Я также попытался заменить весь элемент, но он слишком громоздкий, и он портит пространства имен для элемента.

1 Ответ

3 голосов
/ 16 октября 2019

Таким образом, мы можем использовать следующее для обновления только текста атрибута:

xdmp:node-replace(fn:doc("custom_1.xml")/customer/productsPurchased/@count, attribute { "count" } { "4" } )

attribute { "count" } представляет узел атрибута с именем атрибута в виде «count», точно так же, как у нас есть текст text { "some text" }узел.

...