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