1

現在 XSLT コードで処理されている XML ファイルの作成日/変更日を知りたいです。

XML ファイルを処理し、HTML レポートを作成しています。ソース XML ファイルの日付を HTML レポートに含めたいです。

注: 私は C# .NET 2008 を使用しており、組み込みの XslCompiledTransform クラスを使用しています。それ以来、ここで他の回答からの入力を使用して解決策(別の回答)を見つけました。ありがとう!

4

3 に答える 3

3

XSLTがアクセスできるのは、ソースツリーのノード、document()関数を介して読み込まれたドキュメント内のノード、XSLTテンプレート自体のノード(これもdocument()関数を介して)、および引数として変換に渡された値のみです。

したがって、ファイル名とその作成/変更日をトランスフォームで使用できるようにする場合は、それらをこれらの場所の1つに配置する必要があります。

使用しているプラ​​ットフォームによっては、これを行うためにXSLT拡張メソッドを実装することも可能ですが、それが私の最後の選択です。

于 2009-03-13T18:03:37.393 に答える
3

作成日/変更日は XML ファイルに書き込まれる必要があります。そうしないと、ファイルシステムと通信しない限り、それを見つけることができません。

この質問は多少関連しています: xslt-how-to-get-file-names-from-a-certain-directory

于 2009-03-13T16:44:04.357 に答える
2

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"/>
于 2009-03-13T20:52:53.307 に答える