Marklogic 使用xdmp:文档插入并指定xml编码

Marklogic 使用xdmp:文档插入并指定xml编码,marklogic,marklogic-8,Marklogic,Marklogic 8,我有一个xquery端点,它使用xdmp:document insert加载进入数据库的文件。。当尝试上载具有“ISO-8859-1”编码的XML文档时,此操作失败。。下面是我的代码 declare %rapi:transaction-mode("update") function repoLoad:post($context as map:map, $params as map:map,$input as document-node()*) as document-node()* {

我有一个xquery端点,它使用xdmp:document insert加载进入数据库的文件。。当尝试上载具有“ISO-8859-1”编码的XML文档时,此操作失败。。下面是我的代码

declare  %rapi:transaction-mode("update") function repoLoad:post($context as map:map, $params  as map:map,$input as document-node()*) as document-node()*
{

    let $filename := xdmp:get-request-field-filename("upload")
    let $contentType := xdmp:get-request-field-content-type("upload")

    let $uri := "/documents/"

    let $_ := xdmp:document-insert($uri, xdmp:get-request-field("upload"),(xdmp:default-permissions()), ("raw"))

    return $uri

};
对于非UTF8编码的xml文档,此操作失败。。我得到以下例外情况。。有什么解决办法吗

错误:AppRequestTask::run:XDMP-DOCUTF8SEQ:无效的UTF-8转义 第1行的序列——文档未进行UTF-8编码


如果可以使用声明编码的XML prolog生成有效负载,那么应该可以:

<?xml version="1.0" encoding="ISO-8859-1">
... rest of the document ...

希望这能有所帮助,

实际上我上传的xml文件确实有xml prolog``…````第二种解决方案对我不起作用,因为我不能假设所有的东西都是XML,在第一种解决方案中,您确定声明的编码是正确的吗?有时文件没有声明正确的编码。您可以使用“format xml”而不是“format binary”来尝试xdmp:unquote(),也可以不使用xdmp:binary-decode()来查看这是否有效。关于第二种解决方案,我假设您可以在$contentType上进行分支,以确定何时应用该方法。启用修复选项后,它将嗅探前几行字符以进行有根据的猜测,但在其他情况下使用默认的UTF-8编码。此处可以找到有限的详细信息:。几年前,我编写了一些函数来智能地嗅探接收时的编码,但会大大降低接收速度:。像这样的函数可能会让这更容易一些,但我没有尝试过。。
xdmp:document-insert(
    $uri,
    xdmp:binary-decode(
        xdmp:unquote(
            xdmp:get-request-field("upload"), (), "format-binary"
            ),
        "ISO-8859-1"
        ),
    ... collection, permissions, and other arguments ...
    )