1

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

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

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

4

3 回答 3

3

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

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

于 2009-03-13T16:44:04.357 回答
3

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

因此,如果您希望文件名及其创建/修改日期可用于您的转换,您必须将它们放在这些地方之一。

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

于 2009-03-13T18:03:37.393 回答
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"/>
于 2009-03-13T20:52:53.307 回答