-1

我正在尝试使用 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>
4

3 回答 3

2

据我从发行说明中得知,DataPower 仅支持 XSLT 1.0 版。它支持 XPath 2.0 函数,但仅作为 XQuery 的一部分,而不是 XSLT。

于 2014-09-01T15:44:28.207 回答
1

如果(看起来)您正在尝试确定输入是否包含有效日期 - 即相当于:

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() 扩展函数的 XSLT 1.0 处理器,包括。IBM 数据电源。

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

于 2014-09-03T02:00:10.463 回答
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 中受支持。

参考伊恩的回答

于 2014-09-01T20:58:39.563 回答