0

現在、DOCX ドキュメントから (X)HTML ファイルへの変換を処理する XSLT スタイルシートを作成中です。

画像が (解凍された DOCX アーカイブの /word/media フォルダーに) 含まれているか、ファイル システムから参照されているという事実を考えると、指定されたソースの場所から、パラメーターで指定された変換の出力フォルダーにそれらをコピーする必要があります。外部構成ファイルで。

実際に純粋な XSLT を使用することは不可能ですが、Saxon XSLT プロセッサの PE および EE バージョンでは、再帰的な Java 拡張関数を呼び出すことができます ( http://www.saxonica.com/documentation/extensibility/functions/を参照)。 ) これにより、XSLT スタイルシートのコンテキスト内からファイル/ファイル システム操作を実行できます。

これまでのところ、指定されたソースの場所からファイルを取得し、目的の出力フォルダーにコピーできます。ここで Stefan Krause が説明したアプローチを採用しました: http://www.oxygenxml.com/archives/xsl-list/201011/msg00051.html

ただし、これは出力フォルダーが既に存在する場合にのみ機能します。そうでない場合、Java 関数はエラー メッセージを生成します。

だから私が今欲しいのは、変換の最初に出力フォルダーを作成することです。

    <xsl:template match="/">
      <!-- the reflexive java function that creates the output dir gets called -->
      <xsl:value-of select="java:mkdirs($base-path,$dir)" />
    </xsl:template>

これは、これまでに持っていた java:mkdirs 関数 (外部ファイル内) ですが、機能しません。

    <xsl:stylesheet 
      version    = "2.0"
      xmlns:xs   = "http://www.w3.org/2001/XMLSchema"
      xmlns:xsl  = "http://www.w3.org/1999/XSL/Transform"

      xmlns:java      = "http://www.java.com"
      xmlns:java-uri  = "java.net.URI"
      xmlns:java-file = "java.io.File">

      <!-- reflexive java function to create a folder -->
      <xsl:function name="java:mkdirs">
        <xsl:param    name="base-path" as = "xs:string" />
        <xsl:param    name="dir"       as = "xs:string" />
        <xsl:variable name="full-path" as = "xs:string" select = "concat($base-path,'/',$dir)" />
        <xsl:variable name="new-dir" select="java-file:new(java-uri:new($full-path))" />
        <xsl:sequence select="java-file:mkdirs($new-dir)" /> 
      </xsl:function>
    </xsl:stylesheet>
4

1 に答える 1

0

必要な機能はすべて、Saxon 9.5 (PE 以降のエディション) で利用可能な EXPath ファイル モジュールにあると思います。自分で書く必要はありません。http://www.saxonica.com/documentation/index.html#!functions/expath-fileを参照してください。

于 2013-05-09T16:33:20.723 に答える