1

我有一个文档,我遍历一个xslt然后捕获到一个变量中,例如 $doc。

设置了必要的xslt输出选项,以便我可以docytpe在文档中获取我的声明序言,并且当我xdmp:save使用 $doc 进行操作时,在保存选项节点中重复输出设置(但这是必要的吗?),我很高兴得到我的doctype声明,如我的<xsl:output/>选项中指定的那样。

但是,我想将与其他二进制文档放在一起的文档压缩并保存。

但压缩文件中不包含我的doctype声明。

我通过一个模块中的函数创建了 zip,该模块中的 xdmp:output 选项设置为xslt, 但是MarkLogic/Xquery-style. 我的 zip 函数是这样的:

`declare function p2n:bundle-document($basename as xs:string, $doc as document-node()) as binary()
{
  let $manifest := <parts xmlns="xdmp:zip">
                    {
                      <part>{$basename}</part>
                    }
                   </parts>
 let $zip       := xdmp:zip-create($manifest, $doc)
 return $zip  
};`

无济于事,唉。当我终于打开拉链时,并没有DOCTYPE声明。

谢谢,

4

1 回答 1

1

您需要应用 xdmp:quote,并将结果包装在文本节点中以执行此操作,例如:

let $basename := "test.xml"
let $xsl :=
    <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

        <xsl:output doctype-public="test" doctype-system="test"/>

        <xsl:template match="@*|node()">
            <xsl:copy-of select="."/>
        </xsl:template> 
    </xsl:stylesheet>

let $xml := <test/>
let $doc := text { xdmp:quote(xdmp:xslt-eval($xsl, $xml))}
let $manifest :=
    <parts xmlns="xdmp:zip">{
        <part>{$basename}</part>
    }</parts>
let $zip := xdmp:zip-create($manifest, $doc)
return
    xdmp:save("d:\tmp\test.zip", $zip) 

于 2013-02-15T07:42:57.923 回答