XQuery FN: заменить не ведет себя, как ожидалось - PullRequest
0 голосов
/ 25 мая 2010

У меня есть лист Excel в формате XML, который содержит

<Cell ss:StyleID="s127"><Data ss:Type="String">Replace Me</Data></Cell>

Я хочу заменить @ A01-Replace другой строкой. Я использую функцию замены в XQuery следующим образом:

let $excel := doc("document.xml")

let $test := "another string"

return replace($excel, "Replace Me", $test)

Перед вызовом replace переменная $ excel является допустимым XML при выводе. Однако когда я вывожу $ excel после вызова функции замены, все теги XML удаляются, а $ excel представляет собой строку с содержимым ячеек в качестве значений. Я хотел бы сохранить там теги XML.

То, что я ожидаю, это

<Cell ss:StyleID="s127"><Data ss:Type="String">another string</Data></Cell>

Однако я получаю

another string

Все теги XML удалены.

Есть идеи?

1 Ответ

0 голосов
/ 25 мая 2010

fn:replace - это простая функция управления строками из XQuery.

Эта функция работает со строкой, а не с узлом () * типов data-type.

let $replaced-str := fn:replace( $excel/Data/text(), "Replace Me", $test)

должен вернуть другую строку.

Если вы хотите работать с XML-документом, вам нужно использовать xdmp:node-replace функция типа, специфичная для MarkLogic XmlDatabase.

Если вы хотите node-replace на основе XQuery/Xml/Memory, то вы можете написать простой метод рекурсивной замены, который принимает XPath и заново создает новый узел. Или же посмотрите этот пример MarkLogic-commons .

...