В XSLT как вы можете получить дату создания / изменения файла XML? - PullRequest
1 голос
/ 13 марта 2009

Я хотел бы знать дату создания / изменения файла XML, который в настоящее время обрабатывается моим кодом XSLT.

Я обрабатываю файл XML и создаю отчет в формате HTML. Я хотел бы включить дату исходного файла XML в отчет HTML.

Примечание: я использую C # .NET 2008 и использую встроенный класс XslCompiledTransform. С тех пор я нашел решение (отдельный ответ), используя вход из других ответов здесь. Спасибо!

Ответы [ 3 ]

3 голосов
/ 13 марта 2009

Единственные вещи, к которым XSLT имеет доступ, - это узлы исходного дерева, узлы в документах, считываемые с помощью функции document(), узлы в самом шаблоне XSLT (снова с помощью функции document()) и значения, передаваемые в преобразовать в качестве аргументов.

Таким образом, если вы хотите, чтобы имя файла и его дата создания / изменения были доступны для вашего преобразования, вы должны поместить их в одно из этих мест.

Можно реализовать методы расширения XSLT, чтобы сделать это, в зависимости от используемой вами платформы, но это был бы мой последний выбор.

3 голосов
/ 13 марта 2009

Дата создания / изменения должна быть записана в файл XML, в противном случае вы не сможете найти ее, если не будете каким-либо образом общаться с файловой системой.

Этот вопрос в некоторой степени связан с: xslt-как-получить-имена-файлов-из-определенного-каталога

2 голосов
/ 13 марта 2009

После предложений Каарела и Роберта мне удалось найти следующее решение:

Получите дату изменения файла в 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"/>
...