我想知道我的 XSLT 代码当前正在处理的 XML 文件的文件创建/修改日期。
我正在处理一个 XML 文件并生成一个 HTML 报告。我想在 HTML 报告中包含源 XML 文件的日期。
注意:我正在使用 C# .NET 2008 并使用内置的 XslCompiledTransform 类。此后,我使用此处其他答案的输入找到了解决方案(单独的答案)。谢谢!
我想知道我的 XSLT 代码当前正在处理的 XML 文件的文件创建/修改日期。
我正在处理一个 XML 文件并生成一个 HTML 报告。我想在 HTML 报告中包含源 XML 文件的日期。
注意:我正在使用 C# .NET 2008 并使用内置的 XslCompiledTransform 类。此后,我使用此处其他答案的输入找到了解决方案(单独的答案)。谢谢!
创建/修改日期必须写入 XML 文件,否则您无法找到它,除非您以某种方式与文件系统通信。
这个问题有点相关:xslt-how-to-get-file-names-from-a-certain-directory
XSLT 可以访问的唯一内容是源树的节点、通过document()
函数读取的文档中的节点、XSLT 模板本身中的节点(同样通过document()
函数)以及作为参数传递给转换的值。
因此,如果您希望文件名及其创建/修改日期可用于您的转换,您必须将它们放在这些地方之一。
可以实现 XSLT 扩展方法来执行此操作,具体取决于您使用的平台,但这是我的最后选择。
根据 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"/>