2014-09-01 44 views
-1

我想在XSLT中使用castable函數將字符串轉換爲日期。但我得到一個解析錯誤。我正在使用DataPower XI52版本6.0.1.0。 XI52是否支持此功能?無法在XSLT中使用fn:cast和castable

示例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> 

這應該與支持EXSLT日期任何XSLT 1.0處理器工作:日期()擴展功能,含。 IBM DataPower。然而

注意,它不與撒克遜6.5.5那會很樂意輸出2011-31-12<xsl:value-of select="date:date('2011-31-12')"/>結果工作 - 儘管specification處方爲空字符串,在這種情況下所需的結果。

+0

謝謝!邁克爾,我已經在我的代碼中實現了這一點,它工作正常。 – 2014-09-03 12:52:11

+0

@OmkarVenkata請關閉此問題。 – 2014-09-03 14:52:31

2

據我可以從release notes告訴,DataPower的只支持XSLT 1.0版。它支持XPath 2.0函數,但僅作爲XQuery的一部分,而不是XSLT。

+0

嗨伊恩,謝謝你的建議。您可以請我建議我一種方法如何將字符串數據轉換爲xslt – 2014-09-02 05:12:01

0

首先,在任何版本的XSLT/XPath中都沒有函數fn:cast()。也許你正在考慮XPath 2.0中的「cast as」操作符:Input/Date cast as xs:date

其次,Datapower不支持XSLT中的XPath 2.0。 XPath 2.0僅在XQuery中受支持。

Ian

+0

HI Micheal,我已經看到fn:在XSLT和XPath擴展下的IBM datapower infocenter中投射。在該函數的示例部分下,我可以看到XPath 1.0支持的類型。不確定我的理解是否正確。也請你讓我知道如何處理上面的數據類型轉換在xslt – 2014-09-02 05:19:14

+1

對不起,不能幫你任何DataPower特定的。而且自從我使用XSLT 1.0以來已經有10年了,還有其他人可以幫助你做得比我更好。 – 2014-09-02 09:26:01