XQuery fn:替换不按预期行事

时间:2010-05-25 01:30:20

标签: excel xquery

我有一个XML格式的Excel工作表,其中包含

<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。但是,当我在调用replace函数后输出$ excel时,所有XML标记都被剥离了,$ excel是一个字符串,其中单元格的内容为其值。我想在那里保留XML标签。

我期待的是

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

然而,我得到了

another string

所有XML标记都被删除了。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

fn:replace是一个来自XQuery的简单字符串操作函数。

此函数适用于字符串,而非节点()* 类型data-type

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

应该返回另一个字符串。

如果您想使用XML文档,则需要使用 xdmp:node-replace类型函数,特定于MarkLogic XmlDatabase。

如果你想要一个简单的XQuery/Xml/Memory node-replace,那么你可以编写一个简单的递归替换方法,它接受一个XPath并重新创建一个新节点。要么 看看this MarkLogic-commons example