【发布时间】:2019-08-11 10:00:00
【问题描述】:
我发现可以在 MarkLogic 数据库的 XML 文档中存储无效的 XML 字符,当我尝试更新文档中的文本时,当涉及到需要引用和取消引用 XML 数据时,这会导致问题。
我现在有示例代码证明可以存储无效数据。您可以从 Query Console 运行此命令,但在尝试取消引号字符串时会出现错误,因为引号字符串包含“”,它是从存储在数据库中的 XML 生成的。
let $Doc := <TEST>Here is invalid character 14: {fn:codepoints-to-string((14))}</TEST>
return
xdmp:document-insert("/Test.xml", $Doc)
;
let $Quoted := xdmp:quote(/TEST)
let $Unquoted := xdmp:unquote($Quoted)
return
$Unquoted
【问题讨论】:
-
您使用的是哪个版本的 MarkLogic?当我尝试运行该脚本时,MarkLogic 9 在插入语句中引发错误:XDMP-CODEPOINT: (err:FOCH0001) fn:codepoints-to-string(14) -- Codepoint not legal
-
如果我理解正确,这是对stackoverflow.com/questions/57434493/… 的跟进。如果是这样,最好编辑原始帖子,以便讨论集中在一个地方。
-
我使用的是 9.0-9。当我运行它时,我收到以下消息: [1.0-ml] XDMP-DOCCHARREF: xdmp:unquote("
Here is invalid character 14:  ") -- Invalid character reference "14 " 在第 1 行我似乎无法包含屏幕截图,所以我只能描述 Query Console 也以红色显示第 8 行,其中 xdmp:unquote 语句突出显示,所以它没有抱怨文档的插入,确实可以查看数据库中的文档。 -
补充一下,作为三重检查,我从datase中读回测试文件的内容并输出codepoints,可以看到最后一个字符是“14”:72 101 114 101 32 105 115 32 105 110 118 97 108 105 100 32 99 104 97 114 97 99 116 101 114 32 49 52 58 32 14
标签: marklogic