現在 XSLT コードで処理されている XML ファイルの作成日/変更日を知りたいです。
XML ファイルを処理し、HTML レポートを作成しています。ソース XML ファイルの日付を HTML レポートに含めたいです。
注: 私は C# .NET 2008 を使用しており、組み込みの XslCompiledTransform クラスを使用しています。それ以来、ここで他の回答からの入力を使用して解決策(別の回答)を見つけました。ありがとう!
現在 XSLT コードで処理されている XML ファイルの作成日/変更日を知りたいです。
XML ファイルを処理し、HTML レポートを作成しています。ソース XML ファイルの日付を HTML レポートに含めたいです。
注: 私は C# .NET 2008 を使用しており、組み込みの XslCompiledTransform クラスを使用しています。それ以来、ここで他の回答からの入力を使用して解決策(別の回答)を見つけました。ありがとう!
XSLTがアクセスできるのは、ソースツリーのノード、document()
関数を介して読み込まれたドキュメント内のノード、XSLTテンプレート自体のノード(これもdocument()
関数を介して)、および引数として変換に渡された値のみです。
したがって、ファイル名とその作成/変更日をトランスフォームで使用できるようにする場合は、それらをこれらの場所の1つに配置する必要があります。
使用しているプラットフォームによっては、これを行うためにXSLT拡張メソッドを実装することも可能ですが、それが私の最後の選択です。
作成日/変更日は XML ファイルに書き込まれる必要があります。そうしないと、ファイルシステムと通信しない限り、それを見つけることができません。
この質問は多少関連しています: xslt-how-to-get-file-names-from-a-certain-directory
Kaarel と Robert からの提案の後、次の解決策にたどり着くことができました。
C# でファイルの変更日を取得し、次のように XSLT プロセッサに渡します。
XmlTextWriter tw = new XmlTextWriter(htmlPath, null);
tw.Formatting = Formatting.Indented;
tw.Indentation = 4;
XsltArgumentList args = new XsltArgumentList();
FileInfo fi = new FileInfo(xmlPath);
args.AddParam("FileDate", string.Empty,
fi.LastWriteTime.Date.ToShortDateString());
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(xsltPath);
xslt.Transform(xmlPath, args, tw);
tw.Close();
次に、XSLT コードで、次のようにその引数を param として定義してアクセスします。
<xsl:param name="FileDate"/>
<xsl:text>Revision Date: </xsl:text>
<xsl:value-of select="$FileDate"/>