Программа, которую мы используем в моем офисе, экспортирует отчеты, переводя XML-файл, который он экспортирует с файлом XSLT, в XHTML. Я переписываю XSLT, чтобы изменить форматирование и добавить дополнительную информацию из исходного XML-файла.
Я хотел бы включить дату создания файла в окончательный отчет. Но текущая дата и время не включены в исходный XML-файл, и я не могу контролировать, как создается XML-файл. Кажется, что в XSLT нет никаких функций даты, которые возвращали бы текущую дату.
Кто-нибудь знает, как я могу включить текущую дату во время преобразования XSLT?
Ответы:
XSLT 2
Функции даты доступны изначально, например:
<xsl:value-of select="current-dateTime()"/>
Также есть
current-date()
иcurrent-time()
.XSLT 1
Используйте пакет расширения даты и времени EXSLT.
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"/>
источник
xsltproc --stringparam current-date `date +%Y-%m-%d` -o output.html path-to.xsl path-to.xml
. Некоторые системы также просто принимают параметры как$param=value
, в этом случае$current-date=`date +%Y-%m-%d`
где-то. Или поищите способы указать параметры в любом используемом вами 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()"/>
источник
Поздний ответ, но мое решение работает в Eclipse XSLT. Eclipse использует XSLT 1 на момент написания этой статьи. Вы можете установить движок XSLT 2, например Saxon. Или вы можете использовать решение XSLT 1 ниже, чтобы вставить текущую дату и время.
<xsl:value-of select="java:util.Date.new()"/>
Это вызовет класс данных Java для вывода даты. Это не сработает, если вы также не добавите в свой
<xsl:stylesheet>
тег следующее определение «java:» .<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
источник