2013-04-04 3 views
0

Я пытаюсь преобразовать XML в CSV, используя XSLT с версией 2.0. Но я получаю ошибку компиляции при использовании метода date-date в XSLT. Ниже ошибка:Получение ошибки компиляции при использовании метода format-date() в XSLT

Error checking type of the expression 'funcall(format-date, [variable-ref(dt/string), literal-expr([D01]/[M01]/[Y0001])])'.
FATAL ERROR: 'Could not compile stylesheet'.

XSLT код:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:func="http://exslt.org/functions" xmlns:date="http://exslt.org/dates-and-times" 
      extension-element-prefixes="date" date:doc="http://www.exslt.org/date"> 

<xsl:output method="text"/> 

<xsl:template match="/">  
<xsl:variable name="dt" select="'2013-04-04'"/> 
<xsl:value-of select="format-date($dt, '[D01]/[M01]/[Y0001]')" /> 
<xsl:value-of select="format-date(current-date(), '[D01]/[M01]/[Y0001]')" />    

</xsl:template> 
</xsl:stylesheet> 

ответ

1

Вашего переменного $ дт является строкой, а не дата , Вам необходимо преобразовать его в дату с помощью xs: date ('2013-04-04'), прежде чем вы сможете отформатировать его.

+0

Получая ту же ошибку даже после ее преобразования на дату, я получаю ту же ошибку, когда я использую «current-date()». Я не уверен, что я что-то упустил. Я получаю эту ошибку компиляции, когда пытаюсь использовать функции даты в XSLT. Без функций даты мой XSL-код работает нормально. Я использую версию 2.0 – Jyothi

+0

Возможно, вы не используете версию 2.0. Иногда люди воображают, что просто писать версию = "2.0" в таблице стилей автоматически превратит XSLT-процессор в процессор 2.0. Как вы выполняете преобразование? –

+0

Я использую трансформатор «javax.xml.transform» с кодом Java. Я хочу преобразовать время даты, возвращенное из метода «System.currentTimeMillis()», в формат, который можно читать, например «« MM/dd/yyyy hh: mm: ss a »». Значение, возвращаемое из «System.currentTimeMillis()» (например: 1364969832764), записывается в XML, а затем я пытаюсь преобразовать этот формат даты в формат XSLT. – Jyothi

0

Это работало для меня (с помощью Saxon):

<xsl:variable name="dt">2013-04-04</xsl:variable> 
+1

Причина этого заключается в том, что переменная является узлом XML-документа, который распыляется для создания нетипированногоАтомного значения, а значение untypedAtomic при передаче функции автоматически преобразуется в требуемый тип (xs: date). Однако удобно, это окольный и неэффективный способ достижения цели. –

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