如何在MarkLogic中转义xml字符串中的特殊字符?

如何在MarkLogic中转义xml字符串中的特殊字符?,marklogic,marklogic-8,Marklogic,Marklogic 8,我有一个来自Java的base64编码格式的XML字符串 PHJvb3Q+PGNoaWxkPiY8L2NoaWxkPjxjaGlsZD48PC9jaGlsZD48Y2hpbGQ+PjwvY2hpbGQ+PGNoaWxkPns8L2NoaWxkPjxjaGlsZD59PC9jaGlsZD4vcm9vdD4= 我使用xdmp:base64-decode()对其进行解码。它给我的输出是 <root><child>&</child><child>

我有一个来自Java的base64编码格式的XML字符串

PHJvb3Q+PGNoaWxkPiY8L2NoaWxkPjxjaGlsZD48PC9jaGlsZD48Y2hpbGQ+PjwvY2hpbGQ+PGNoaWxkPns8L2NoaWxkPjxjaGlsZD59PC9jaGlsZD4vcm9vdD4=
我使用
xdmp:base64-decode()
对其进行解码。它给我的输出是

<root><child>&</child><child><</child><child>></child><child>{</child><child>}</child>/root>
&{}/root>
输出是一个字符串。为了将其转换为XML,我使用了
xdmp:unquote()
,但是这里的特殊字符会产生错误

我还尝试使用
xdmp:unquote()
使用
repair full
选项,但没有解决问题

注意:我的实际数据中存在一些特殊字符,这些字符会导致一些不必要的错误


如何处理这种情况以在MarkLogic中插入XML?

base64编码字符串中的文本不是格式良好的XML。除了
&
之外,这是格式错误的XML。你能修复源代码吗?像
&
这样的字符应该表示为实体:
&apos。。
xdmp:unquote(
 replace(
  replace(
   replace(
     xdmp:base64-decode("PHJvb3Q+PGNoaWxkPiY8L2NoaWxkPjxjaGlsZD48PC9jaGlsZD48Y2hpbGQ+PjwvY2hpbGQ+PGNoaWxkPns8L2NoaWxkPjxjaGlsZD59PC9jaGlsZD4vcm9vdD4=")
   ,"&amp;", "&amp;amp;")
  ,"&gt;&lt;&lt;", "&gt;&amp;lt;&lt;")
 ,"/root>", "&lt;/root>")
)
<root>
  <child>&</child>
  <child><</child>
  <child>></child>
  <child>{</child>
  <child>}</child>
</root>