1

$doc などの変数を実行してxsltキャプチャするドキュメントがあります。

xslt必要な出力オプションが設定されているためdocytpe、ドキュメントで宣言プロローグを取得できます。またxdmp:save、$doc を使用して保存オプション ノードで出力設定を繰り返すと (必要ですか?)、喜んでdoctype宣言を取得します。 、私<xsl:output/>のオプションで指定されたとおり。

ただし、他のバイナリ ドキュメントと一緒に取得したドキュメントを圧縮して保存したいと考えています。

doctypeしかし、圧縮されたドキュメントには、私の宣言は含まれていません。

必要な xdmp:output オプションがxslt, but 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 に答える