AH Formatter / XSL Formatter
Q&A



XSLT/XSL-FO/SVG/MathML 仕様について

XSLT

トップ
基本・一般
AH Formatter について
XSL Formatter について
操作方法
プログラミング
XSLT/XSL-FO/SVG/MathML 仕様について
XSLT/XSL-FO/MathML テクニック
索引
Q.  組版結果に、組版(印刷)した日付を埋め込むことはできますか。 [No.2003013105]
A. 

XSLスタイルシートにスクリプトを使用すれば可能です。(ただしこれはXSLTの拡張機能ですので、XSLTプロセッサに依存します。ご注意ください)
XSLT プロセッサに MSXML を使用する場合、下記のようなXSLスタイルシートを作成することで、XSL-FOに日付を埋め込むことができます。

<xsl:stylesheet version="1.0"
    xmlns:fo="http://www.w3.org/1999/XSL/Format"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:user="urn:my-scripts"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt">
    <!-- msxsl:script 年月日の取得 -->
    <msxsl:script language="JScript" implements-prefix="user">
        function date(nodelist) {
            var DateObj = new Date()
            return DateObj.getFullYear() + "年" +
                    (DateObj.getMonth() +1 )+ "月" +
                        DateObj.getDate() + "日";
        }
    </msxsl:script>

-----中略----

    <!-- 作成日の出力 -->
    <fo:block text-align="right">
        作成日:<xsl:value-of select="user:date()"/>
    </fo:block>

XSL FormatterのJavaインターフェイスを使う場合、XSLスタイルシートにMSXML専用の拡張要素msxsl:scriptによるJScriptが使用されていると、大量のXMLからXSL-FOへの変換時にエラーが発生することがあります。JavaインターフェイスではJNI(JavaNativeInterface)という技術を使っていますが、MSXMLとJNIの組み合わせでは上記の箇所でエラーが発生する場合があることがわかりました。印刷日時の出力は、外部パラメータを使用する、または外部XSLTプロセッサを使用してその拡張機能を使うなどの他の方法を検討するのがよいでしょう。


Copyright © 1999-2011 Antenna House, Inc. All rights reserved.
Antenna House is a trademark of Antenna House, Inc.