我有一个来自Java的XML字符串,采用base64编码格式。
PHJvb3Q+PGNoaWxkPiY8L2NoaWxkPjxjaGlsZD48PC9jaGlsZD48Y2hpbGQ+PjwvY2hpbGQ+PGNoaWxkPns8L2NoaWxkPjxjaGlsZD59PC9jaGlsZD4vcm9vdD4=
我使用xdmp:base64-decode()
对其进行解码。它给我输出
<root><child>&</child><child><</child><child>></child><child>{</child><child>}</child>/root>
输出是一个字符串。为了将其转换为XML,我使用xdmp:unquote()
,但此处出现的特殊字符会产生错误。
我也尝试将repair-full
选项与xdmp:unquote()
一起使用,但它没有解决问题。
注意:我的实际数据中有一些特殊字符会导致一些不必要的错误。
如何处理这种类型的场景以在MarkLogic中插入XML?
答案 0 :(得分:1)
来自base64编码字符串的文本不是格式良好的XML。除了&
和<
未正确编码之外,root
元素的结束标记缺失<
。在字符串的末尾,</child>/root>
应为</child></root>
。
作为如何擦除文本并修复它的示例,下面的代码将修复此特定的解码值,然后使用xdmp:unquote()
解析为XML:
xdmp:unquote(
replace(
replace(
replace(
xdmp:base64-decode("PHJvb3Q+PGNoaWxkPiY8L2NoaWxkPjxjaGlsZD48PC9jaGlsZD48Y2hpbGQ+PjwvY2hpbGQ+PGNoaWxkPns8L2NoaWxkPjxjaGlsZD59PC9jaGlsZD4vcm9vdD4=")
,"&", "&amp;")
,"><<", ">&lt;<")
,"/root>", "</root>")
)
它产生以下格式良好的XML:
<root>
<child>&</child>
<child><</child>
<child>></child>
<child>{</child>
<child>}</child>
</root>
然而,这种修复是乏味的,并且可能变得困难。最好使用诸如 TagSoup之类的工具来修复标记并将其转换为格式良好的XML。