XQuery fn:replace 的行为不符合预期
我有一个 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
fn:replace
是 XQuery 中的一个简单字符串操作函数。此函数适用于字符串,而不是 node()* 类型
data-type
。应该返回另一个字符串。
如果您想使用 XML 文档,那么您需要使用
xdmp:node-replace
类型函数,特定于 MarkLogic XmlDatabase。如果您想要一个简单的基于
XQuery/Xml/Memory
的node-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
.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
basednode-replace
then you can write a simple recursive replace method which accepts an XPath and re-creates a new node. Orcheck out this MarkLogic-commons example.