XQuery fn:replace 的行为不符合预期

发布于 2024-09-03 07:37:19 字数 729 浏览 3 评论 0原文

我有一个 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)

在调用替换之前,变量 $excel 在输出时是有效的 XML。但是,当我在调用替换函数后输出 $excel 时,所有 XML 标记都已被删除,并且 $excel 是一个以单元格内容作为其值的字符串。我想将 XML 标签保留在那里。

我所期望的是

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

然而,我得到

another string

All the XML labels are stripped out.

有什么想法吗?

I have an Excel worksheet in XML format which contains

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

I want to replace @A01-Replace with a different string. I'm using the XQuery's replace function like so:

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

let $test := "another string"

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

Before calling replace, the variable $excel is valid XML upon output. However, when I output $excel after I call the replace function, all of the XML tags have been stripped, and $excel is a string with the content of the cells as its values. I would like to keep the XML tags there.

What I expect is

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

However, I get

another string

All the XML tags are stripped out.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

若能看破又如何 2024-09-10 07:37:19

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

此函数适用于字符串,而不是 node()* 类型 data-type

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

应该返回另一个字符串。

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

如果您想要一个简单的基于 XQuery/Xml/Memorynode-replace,那么您可以编写一个简单的递归替换方法,该方法接受 XPath 并重新创建一个新节点。或者
查看此 MarkLogic-commons 示例

fn:replace is a simple String Manipulation Function from XQuery.

This function works with a String and not node()* types data-type.

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

should return another string.

If you want to work with an XML document then you need to use
xdmp:node-replace type function which is specific to MarkLogic XmlDatabase.

If you want a simple XQuery/Xml/Memory based node-replace then you can write a simple recursive replace method which accepts an XPath and re-creates a new node. Or
check out this MarkLogic-commons example.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文