Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Validation 无法在XSLT中使用fn:cast和castable_Validation_Date_Xslt_Xslt 1.0_Ibm Datapower - Fatal编程技术网

Validation 无法在XSLT中使用fn:cast和castable

Validation 无法在XSLT中使用fn:cast和castable,validation,date,xslt,xslt-1.0,ibm-datapower,Validation,Date,Xslt,Xslt 1.0,Ibm Datapower,我试图使用XSLT中的可转换函数将字符串转换为日期。但是我得到了一个解析错误。我使用的是DataPower XI52版本6.0.1.0。XI52是否支持此功能 示例XML: <Input><Date>2011-31-12</Date></Input> 2011-31-12 我的XSLT: <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Tran

我试图使用XSLT中的可转换函数将字符串转换为日期。但是我得到了一个解析错误。我使用的是DataPower XI52版本6.0.1.0。XI52是否支持此功能

示例XML:

<Input><Date>2011-31-12</Date></Input>
2011-31-12
我的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>


据我所知,DataPower只支持XSLT 1.0版。它支持XPath 2.0函数,但仅作为XQuery的一部分,而不是XSLT。

首先,在任何版本的XSLT/XPath中都没有函数fn:cast()。也许您正在考虑XPath 2.0中的“cast as”操作符:
Input/Date cast as xs:Date

其次,Datapower不支持XSLT中的XPath2.0。XPath 2.0仅在XQuery中受支持

如果(看起来)您试图确定输入是否包含有效日期,请参考

中的答案-即等效于:

XSLT2.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>
<?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>

然后尝试以下操作:

XSLT1.0(+EXSLT)

<?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>
<?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 date:date()扩展函数的XSLT 1.0处理器,包括IBM DataPower


但是请注意,它不适用于Saxon 6.5.5,它将愉快地输出
2011-31-12
,因为
——尽管在本例中规定了空字符串作为所需结果。

Hi Ian,感谢您的建议。您能给我建议一种如何在xsltHI-Micheal中将字符串数据转换为日期的方法吗?我在ibmdatapowerinfocenter中看到了XSLT和XPath扩展下的fn:cast。在这个函数的示例部分,我可以看到XPath 1.0中支持的类型。我不确定我的理解是否正确。另外,您能告诉我如何在xsltSorry中处理上述数据类型转换吗?在DataPower特定的任何方面都无法帮助您。自从我使用XSLT1.0已经10年了,还有其他人可以比我更好地帮助你。谢谢!!Micheal,我已经在我的代码中实现了这一点,而且效果很好。@OmkarVenkata请结束这个问题,然后。