无法在XSLT中使用fn:cast和可浇铸



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

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

从发行说明中可以看出,DataPower只支持XSLT 1.0版本。它支持XPath2.0函数,但仅作为XQuery的一部分,而不是XSLT。

如果(看起来)您正试图确定输入是否包含有效日期,即:

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 date:date()扩展函数的XSLT1.0处理器,包括IBMDataPower。

然而,请注意,它不适用于Saxon 6.5.5,它将愉快地输出2011-31-12作为<xsl:value-of select="date:date('2011-31-12')"/>的结果——尽管规范在这种情况下规定了一个空字符串作为所需结果。

首先,在XSLT/XPath的任何版本中都没有函数fn:cast()。也许您正在考虑XPath 2.0:Input/Date cast as xs:date中的"强制转换为"运算符。

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

参考Ian 的回答

相关内容

  • 没有找到相关文章

最新更新