XSLTは現在の日付を挿入できますか?


92

私のオフィスで使用しているプログラムは、XSLTファイルと共にエクスポートするXMLファイルをXHTMLに変換することによってレポートをエクスポートします。XSLTを書き直して、フォーマットを変更し、ソースXMLファイルからさらに情報を追加します。

ファイルが作成された日付を最終レポートに含めたいのですが。しかし、現在の日付/時刻は元のXMLファイルに含まれておらず、XMLファイルの作成方法を制御することもできません。現在の日付を返すXSLTに組み込まれている日付関数はないようです。

XSLT変換中に現在の日付を含める方法を誰かが知っていますか?


問題なのは、どのパーサーが使用されているのかわかりません。私が使用したプログラムは、レポートを直接エクスポートし、プログラムディレクトリのXSLTファイルを使用してレポートを生成します。
エリック

回答:


115

XSLT 2

日付関数は、次のようにネイティブで使用できます。

<xsl:value-of  select="current-dateTime()"/>

ともcurrent-date()ありcurrent-time()ます。

XSLT 1

EXSLT日時拡張パッケージを使用します。

  1. GitHubから日時パッケージをダウンロードします
  2. date.xslXSLファイルの場所に抽出します。
  3. スタイルシートのヘッダーを設定します。
  4. インポートしdate.xslます。

例えば:

<xsl:stylesheet version="1.0" 
    xmlns:date="http://exslt.org/dates-and-times" 
    extension-element-prefixes="date"
    ...>

    <xsl:import href="date.xsl" />

    <xsl:template match="//root">
       <xsl:value-of select="date:date-time()"/>
    </xsl:template>
</xsl:stylesheet>


7
.net / c#を使用している人は、標準の.NET XSLTトランスフォーマーでEXSLTインポートを機能させるために時間をかけすぎないでください。すぐにMVP.XMLを使用してください。それはしているビルトインESXLTのサポート
Joel Purra

14

MSXMLパーサーの場合、これを試してください:

<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:msxsl="urn:schemas-microsoft-com:xslt"
                xmlns:my="urn:sample" extension-element-prefixes="msxml">

    <msxsl:script language="JScript" implements-prefix="my">
       function today()
       {
          return new Date(); 
       } 
    </msxsl:script> 
    <xsl:template match="/">

        Today = <xsl:value-of select="my:today()"/>

    </xsl:template> 
</xsl:stylesheet>

また、読みmsxslを使用してXSLTスタイルシートスクリプトを:スクリプトJScriptの、C#での拡張XSLT、およびVisual Basic .NET


これは、トランスフォーマーとしてのApache FOPでは機能しません。エラーメッセージ:今日のメソッドへのインスタンスメソッドの呼び出しには、最初の引数としてオブジェクトインスタンスが必要です
Trey Carroll

1
oops:extension-element-prefixes = "msxml"は、extension-element-prefixes = "msxsl"である必要があります。私のシステムでも動作しません。
Jay

14

変換の実行を制御できますか?その場合、現在の日付をXSLに渡し、XSL内から$ current-dateを使用できます。以下は、受信パラメーターを宣言する方法ですが、変換の実行方法がわかっているため、値を渡す方法を説明できません。

<xsl:param name="current-date" />

たとえば、bashスクリプトから次を使用します。

xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml

次に、xslで次を使用できます。

<xsl:value-of select="$current-date"/>

1
実際、値を渡す方法はシステムによって異なります。1つの可能なオプション:UNIXのxsltprocでは、次のようになりますxsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml。一部のシステムはパラメータをとしても受け取る$param=valueため、その場合は$current-date=`date +%Y-%m-%d`どこかにあります。または、使用しているXSLTプロセッサでパラメーターを指定する方法を探します。
lindes

10
...
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:local="urn:local" extension-element-prefixes="msxsl">

    <msxsl:script language="CSharp" implements-prefix="local">
        public string dateTimeNow()
        {       
          return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); 
        } 
    </msxsl:script>  
...
    <xsl:value-of select="local:dateTimeNow()"/>

7

遅い答えですが、私のソリューションはEclipse XSLTで動作します。この記事の執筆時点では、EclipseはXSLT 1を使用しています。SaxonのようなXSLT 2エンジンをインストールできます。または、以下のXSLT 1ソリューションを使用して、現在の日付と時刻を挿入できます。

<xsl:value-of select="java:util.Date.new()"/>

これは、JavaのDataクラスを呼び出して日付を出力します。<xsl:stylesheet>タグに次の「java:」定義も含めない限り、機能しません。

<xsl:stylesheet [...snip...]
         xmlns:java="java"
         [...snip...]>

それが誰かのお役に立てば幸いです。この単純な答えを見つけるのは困難でした。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.