Em XSLT, como você pode obter a data de criação / modificação do arquivo XML?
-
22-07-2019 - |
Pergunta
Gostaria de saber a data de criação do arquivo / modificação do arquivo XML a ser processado por meu código XSLT.
Eu estou processando um arquivo XML e produzir um relatório HTML. Eu gostaria de incluir a data do arquivo XML de origem no relatório HTML.
Nota: eu estou usando C # .NET 2008 e usando a classe embutida XslCompiledTransform. Tenho visto que encontrou uma solução (resposta em separado) utilizando a introdução de outras respostas aqui. Obrigado!
Solução 3
Depois de sugestões de Kaarel e Robert, eu era capaz de chegar a seguinte solução:
Obter a data de modificação do arquivo em C # e passá-lo para o processador XSLT como segue:
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();
Em seguida, no código XSLT, definir e acesso esse argumento como um parâmetro da seguinte forma:
<xsl:param name="FileDate"/>
<xsl:text>Revision Date: </xsl:text>
<xsl:value-of select="$FileDate"/>
Outras dicas
A data de criação / modificação deve ser escrito para o arquivo XML, caso contrário você não pode encontrá-lo para fora, a menos que você se comunicar de alguma forma com o sistema de arquivos.
Esta questão é algo relacionado: xslt-how-to-get-arquivo-nomes-de-um-certo-diretório
As únicas coisas que XSLT tem acesso são nós da árvore fonte, nós em documentos lidos através da função document()
, nós no próprio modelo XSLT (novamente através da função document()
), e os valores passados ??para a transformação como argumentos.
Então, se você quiser que o nome do arquivo e sua data de criação / modificação de estar disponível para a sua transformação, você tem que colocá-los em um desses lugares.
É possível implementar métodos de extensão XSLT para fazer isso, dependendo de qual plataforma você está usando, mas que seria a minha última escolha.