在XSLT中,如何获取XML文件的文件创建/修改日期?

时间:2009-03-13 16:40:46

标签: xml xslt xslt-1.0 datecreated

我想知道我的XSLT代码当前正在处理的XML文件的文件创建/修改日期。

我正在处理XML文件并生成HTML报告。我想在HTML报告中包含源XML文件的日期。

注意:我使用的是C#.NET 2008并使用内置的XslCompiledTransform类。我已经使用其他答案的输入找到了解决方案(单独的答案)。谢谢!

3 个答案:

答案 0 :(得分:3)

创建/修改日期必须写入XML文件,否则您无法找到它,除非您以某种方式与文件系统进行通信。

这个问题有点相关:xslt-how-to-get-file-names-from-a-certain-directory

答案 1 :(得分:3)

XSLT可以访问的唯一内容是源树的节点,通过document()函数读入的文档中的节点,XSLT模板本身中的节点(再次通过document()函数),和值作为参数传递给转换。

因此,如果您希望文件名及其创建/修改日期可用于转换,则必须将它们放在其中一个位置。

可以实现XSLT扩展方法来执行此操作,具体取决于您使用的平台,但这将是我的最后选择。

答案 2 :(得分: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代码中,将该参数定义并作为参数访问,如下所示:

<xsl:param name="FileDate"/>

<xsl:text>Revision Date: </xsl:text>
<xsl:value-of select="$FileDate"/>