Program, którego używamy w moim biurze, eksportuje raporty, tłumacząc plik XML, który eksportuje z plikiem XSLT na XHTML. Przepisuję XSLT, aby zmienić formatowanie i dodać więcej informacji ze źródłowego pliku XML.
Chciałbym zawrzeć datę utworzenia pliku w raporcie końcowym. Ale bieżąca data / godzina nie jest zawarta w oryginalnym pliku XML ani nie mam żadnej kontroli nad sposobem tworzenia pliku XML. Wygląda na to, że w XSLT nie ma żadnych funkcji daty, które zwracałyby bieżącą datę.
Czy ktoś ma pojęcie, w jaki sposób mogę uwzględnić bieżącą datę podczas mojej transformacji XSLT?
Odpowiedzi:
XSLT 2
Funkcje daty są dostępne natywnie, takie jak:
<xsl:value-of select="current-dateTime()"/>
Jest też
current-date()
icurrent-time()
.XSLT 1
Użyj pakietu rozszerzenia daty i godziny EXSLT.
date.xsl
do lokalizacji plików XSL.date.xsl
.Na przykład:
<xsl:stylesheet version="1.0" xmlns:date="http://exslt.org/dates-and-times" extension-element-prefixes="date" ...> <xsl:import href="date.xsl" /> <xsl:template match="//root"> <xsl:value-of select="date:date-time()"/> </xsl:template> </xsl:stylesheet>
źródło
W przypadku parsera MSXML spróbuj tego:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:my="urn:sample" extension-element-prefixes="msxml"> <msxsl:script language="JScript" implements-prefix="my"> function today() { return new Date(); } </msxsl:script> <xsl:template match="/"> Today = <xsl:value-of select="my:today()"/> </xsl:template> </xsl:stylesheet>
Przeczytaj również o skryptach arkusza stylów XSLT przy użyciu msxsl: script i rozszerzaniu XSLT za pomocą JScript, C # i Visual Basic .NET
źródło
Czy masz kontrolę nad przebiegiem transformacji? Jeśli tak, możesz przekazać bieżącą datę do XSL i użyć $ current-date z wnętrza XSL. Poniżej znajduje się opis sposobu, w jaki deklarujesz przychodzący parametr, ale wiedząc, jak przeprowadzasz transformację, nie mogę powiedzieć, jak przekazać wartość.
<xsl:param name="current-date" />
Na przykład ze skryptu bash użyj:
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
Następnie w xsl możesz użyć:
<xsl:value-of select="$current-date"/>
źródło
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
. Niektóre systemy po prostu przyjmują parametry jako$param=value
, więc w takim przypadku$current-date=`date +%Y-%m-%d`
gdzieś. Lub poszukaj sposobów na określenie parametrów w dowolnym używanym procesorze XSLT.... xmlns:msxsl="urn:schemas-microsoft-com:xslt" xmlns:local="urn:local" extension-element-prefixes="msxsl"> <msxsl:script language="CSharp" implements-prefix="local"> public string dateTimeNow() { return DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssZ"); } </msxsl:script> ... <xsl:value-of select="local:dateTimeNow()"/>
źródło
Późna odpowiedź, ale moje rozwiązanie działa w Eclipse XSLT. Eclipse używa XSLT 1 w chwili pisania tego tekstu. Możesz zainstalować silnik XSLT 2, taki jak Saxon. Możesz też skorzystać z poniższego rozwiązania XSLT 1, aby wstawić bieżącą datę i godzinę.
<xsl:value-of select="java:util.Date.new()"/>
Spowoduje to wywołanie klasy Data Javy w celu wyświetlenia daty. Nie zadziała, jeśli w
<xsl:stylesheet>
tagu nie umieścisz również następującej definicji „java:” .<xsl:stylesheet [...snip...] xmlns:java="java" [...snip...]>
Mam nadzieję, że to komuś pomoże. Ta prosta odpowiedź była dla mnie trudna do znalezienia.
źródło
format-date(current-date(), '[M01]/[D01]/[Y0001]') = 09/19/2013 format-time(current-time(), '[H01]:[m01] [z]') = 09:26 GMT+10 format-dateTime(current-dateTime(), '[h1]:[m01] [P] on [MNn] [D].') = 9:26 a.m. on September 19.
odniesienie: Formatowanie dat i godzin przy użyciu XSLT 2.0 i XPath
źródło