我有一个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标记都被删除了。
有什么想法吗?
答案 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。