2014-09-01 5 views
-1

Я пытаюсь преобразовать строку на сегодняшний день с помощью функции castable в XSLT. Но я получаю ошибку синтаксического анализа. Я использую DataPower XI52 версии 6.0.1.0. Поддерживает ли XI52 эту функцию?Невозможно использовать fn: cast и castable в XSLT

Пример XML:

<Input><Date>2011-31-12</Date></Input> 

Мой XSLT:

<xsl:stylesheet version="2.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:fn="http://www.w3.org/2005/xpath-functions" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xsl:template match="/"> 
    <xsl:variable name="Date" select="Input/Date"/> 
    <xsl:value-of select="fn:cast($Date,'xs:string','xs:date', true())"/> 
    </xsl:template> 
</xsl:stylesheet> 

ответ

0

Если (как это кажется), вы пытаетесь определить, если вход содержит действительную дату - то есть эквивалент:

XSLT 2,0

<?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" 
exclude-result-prefixes="xs"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:variable name="Date" select="Input/Date"/> 
    <xsl:value-of select="$Date castable as xs:date"/> 
</xsl:template> 

</xsl:stylesheet> 

, а затем попробуйте следующее:

XSLT 1.0 (+ EXSLT)

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
xmlns:date="http://exslt.org/dates-and-times" 
extension-element-prefixes="date"> 
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/> 

<xsl:template match="/"> 
    <xsl:variable name="Date" select="Input/Date"/> 
    <xsl:value-of select="boolean(date:date($Date))"/> 
</xsl:template> 

</xsl:stylesheet> 

Это должно работать с любым XSLT 1.0 процессор, который поддерживает дату EXSLT: дата() функция расширения, вкл. IBM DataPower.

Однако обратите внимание, что он не работает с Saxon 6.5.5, который будет счастливо выход 2011-31-12 как результат <xsl:value-of select="date:date('2011-31-12')"/> - несмотря на specification предписания пустой строки в качестве требуемого результата в этом случае.

+0

Спасибо! Micheal, я реализовал это в своем коде, и он отлично работает. –

+0

@OmkarVenkata Пожалуйста, закройте этот вопрос. –

2

Насколько я могу сказать от release notes, DataPower поддерживает только XSLT версии 1.0. Он поддерживает функции XPath 2.0, но только как часть XQuery, а не XSLT.

+0

Hi Ian, Спасибо за ваше предложение. Не могли бы вы предложить мне способ преобразования строковых данных на сегодняшний день в xslt –

0

Во-первых, нет функции fn: cast() в любой версии XSLT/XPath. Возможно, вы думаете об операторе «cast as» в XPath 2.0: Input/Date cast as xs:date.

Во-вторых, Datapower не поддерживает XPath 2.0 в XSLT. XPath 2.0 поддерживается только в XQuery.

См Ответ от Ian

+0

HI Micheal, я видел fn: листинг в информационном центре IBM datapower под расширениями XSLT и XPath. В разделе примеров этой функции я мог видеть тип, поддерживаемый в XPath 1.0. Не уверен, что мое понимание верное. Также не могли бы вы дать мне знать, как обращаться с вышеперечисленным преобразованием типа данных в xslt –

+1

Извините, не может помочь вам ни на чем конкретном DataPower. И поскольку прошло около 10 лет с тех пор, как я использовал XSLT 1.0, есть и другие люди, которые могут помочь вам в этом намного лучше, чем я. –