オフィスで使用するプログラムは、エクスポートするXMLファイルをXSLTファイルとともにXHTMLに変換することでレポートをエクスポートします。 XSLTを書き直して、フォーマットを変更し、ソースXMLファイルからより多くの情報を追加します。
最終レポートにファイルが作成された日付を含めたいです。しかし、現在の日付/時刻は元のXMLファイルに含まれておらず、XMLファイルの作成方法を制御することもできません。現在の日付を返す日付関数はXSLTに組み込まれていないようです。
XSLT変換中に現在の日付をどのように含めることができるのか、誰にもわかりませんか?
次のような日付関数をネイティブで使用できます。
<xsl:value-of select="current-dateTime()"/>
current-date()
とcurrent-time()
もあります。
EXSLT日時拡張パッケージを使用します。
date.xsl
をXSLファイルの場所に抽出します。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>
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:scriptを使用したXSLTスタイルシートスクリプト および JScript、C#、およびVisual Basic .NETによるXSLTの拡張 も参照してください。
変換の実行を制御できますか?その場合、現在の日付を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"/>
...
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()"/>
遅い答えですが、私のソリューションはEclipse XSLTで動作します。この記事の執筆時点では、EclipseはXSLT 1を使用しています。 SaxonのようなXSLT 2エンジンをインストールできます。または、以下のXSLT 1ソリューションを使用して、現在の日付と時刻を挿入できます。
<xsl:value-of select="Java:util.Date.new()"/>
これにより、JavaのDataクラスが呼び出され、日付が出力されます。次の「Java:」定義も<xsl:stylesheet>
タグに含めない限り機能しません。
<xsl:stylesheet [...snip...]
xmlns:Java="Java"
[...snip...]>
私はそれが誰かを助けることを願っています。この単純な答えは私にとって見つけにくいものでした。
format-date(current-date(), '[M01]/[D01]/[Y0001]') = 09/19/2013
format-time(current-time(), '[H01]:[m01] [z]') = 09:26 GMT+10
format-dateTime(current-dateTime(), '[h1]:[m01] [P] on [MNn] [D].') = 9:26 a.m. on September 19.