我想知道我的XSLT代码当前正在处理的XML文件的文件创建/修改日期。
我正在处理XML文件并生成HTML报告。我想在HTML报告中包含源XML文件的日期。
注意:我使用的是C#.NET 2008并使用内置的XslCompiledTransform类。我已经使用其他答案的输入找到了解决方案(单独的答案)。谢谢!
答案 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"/>