Может ли XSLT вставить текущую дату?
программа, которую мы используем в моем офисе, экспортирует отчеты, переводя XML-файл, который он экспортирует с файлом XSLT в XHTML. Я переписываю XSLT, чтобы изменить форматирование и добавить дополнительную информацию из исходного XML-файла.
Я хотел бы включить дату создания файла в окончательный отчет. Но текущая дата / время не включена в исходный XML-файл, и у меня нет никакого контроля над тем, как создается XML-файл. Кажется, нет никаких функций даты, встроенных в XSLT, который вернет текущую дату.
кто-нибудь знает, как я мог бы включить текущую дату во время моего преобразования XSLT?
6 ответов:
XSLT 2
функции даты доступны изначально, например:
<xsl:value-of select="current-dateTime()"/>
есть еще
current-date()
иcurrent-time()
.XSLT 1
используйте пакет расширения даты и времени EXSLT.
- скачать дата и время пакета из GitHub.
- экстракт
date.xsl
в расположение ваших файлов XSL.- задать заголовок таблицы стилей.
- импорт
date.xsl
.например:
<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>
для синтаксического анализатора MSXML, попробуйте это:
<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>
Читайте также XSLT таблицы стилей сценариев с помощью msxsl: script и расширение XSLT с помощью JScript, C# и Visual Basic .NET
есть ли у вас контроль над запуском преобразования? Если это так, вы можете передать текущую дату в XSL и использовать $current-date изнутри вашего XSL. Ниже показано, как вы объявляете входящий параметр, но зная, как вы выполняете преобразование, я не могу сказать вам, как передать значение.
<xsl:param name="current-date" />
например, из сценария bash используйте:
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
затем в xsl вы можете использовать:
<xsl:value-of select="$current-date"/>
... 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()"/>
поздний ответ, но мое решение работает в Eclipse XSLT. Eclipse использует XSLT 1 на момент написания этой статьи. Вы можете установить XSLT 2 двигатель, как Saxon. Или вы можете использовать решение XSLT 1 ниже, чтобы вставить текущую дату и время.
<xsl:value-of select="java:util.Date.new()"/>
это вызовет класс данных Java для вывода даты. Он не будет работать, если вы также не поместите следующее определение" java: "в свой
<xsl:stylesheet>
тег.<xsl:stylesheet [...snip...] xmlns:java="java" [...snip...]>
Я надеюсь, что это кому-то поможет. Этот простой ответ было трудно найти для меня.
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.
ссылки: форматирование даты и времени с помощью XSLT 2.0 и XPath