【问题标题】:XQuery fn:replace not behaving as expectedXQuery fn:replace 未按预期运行
【发布时间】:2010-05-25 01:30:19
【问题描述】:

我有一个 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 标签都被去掉了。

有什么想法吗?

【问题讨论】:

    标签: excel xquery


    【解决方案1】:

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

    此函数适用于 String 而不是 node()* 类型 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 并重新创建一个新节点。或者 查看this MarkLogic-commons example

    【讨论】:

      猜你喜欢
      • 2014-11-12
      • 1970-01-01
      • 2020-06-28
      • 2012-02-18
      • 2018-01-18
      • 2012-06-14
      • 2019-03-03
      • 2012-09-21
      • 2014-07-19
      相关资源
      最近更新 更多