2015-07-03 4 views
0

Установка: Apache Xalan 2.7.1EXSLT: Дата: Формат-дата: разбор даты, а не разбор времени

Вход:

<?xml version="1.0" encoding="UTF-8"?> 
<r> 
    <generated_date>2015-07-03 11:48</generated_date> 
</r> 

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
      xmlns:xdt="http://exslt.org/dates-and-times" 
      exclude-result-prefixes="xdt"> 
      <xsl:variable name="generated-date" select="xdt:format-date(//generated_date,'YYYY-MM-dd hh:mm:ss')"  /> 

     <xsl:template match="/"> 
      <xsl:value-of select="$generated-date"/> 
     </xsl:template> 
</xsl:stylesheet> 

Выход:

<generated_date>2015-07-03 12:00:00</generated_date> 

Q: Почему я не могу понять, почему время не разобраны все вместе с датой. Время должно быть равно 11:48:00.


Примечание: Только XSLT можно применять 1,0 решения.

ответ

0

Я не могу понять, почему время не разобраны все вместе с даты.

AFAICT, причина, почему он не работает для вас, что прилагаемая строка даты/времени не в одном из определенных форматов, что функция принимает - см: http://exslt.org/date/functions/format-date/index.html

Если вы хотите форматировать как дата, так и время, прилагаемая строка должна быть отформатирована как YYYY-MM-DDThh:mm:ss - то есть, используя T в качестве разделителя между датой и временем и включая секунды в временной части. Смотрите это работает здесь: можно применить http://xsltransform.net/6qVRKwS

только XSLT 1.0 решения.

Я не уверен, какое решение вы ищете здесь. Данная строка уже в требуемом формате, за пропущенные секунды исключением части, так что вы можете просто вывод:

<xsl:value-of select="concat(given-date,':00')"/> 

, не требуя каких-либо расширений.


(1) Следует отметить, что ни один из основных XSLT 1.0 процессоры не поддерживает функцию EXSLT format-date() - и это включает в себя Xalan 2.7.1. Хотя, похоже, он работает, официально функция недоступна - см .: http://xsltransform.net/6qVRKwS/1

Смежные вопросы