当format-date()尝试格式化XSL中的无效日期时进行处理

时间:2015-12-30 20:29:30

标签: xml date xslt

我需要使用XSL格式化日期。例如:

    <xsl:choose>
        <xsl:when test="$rawdate">
            <xsl:variable name="dt" as="xs:date" select="$rawdate"/>
            <xsl:value-of select="format-date($dt, '[D01]-[MNn,*-3]-[Y0001]')"/>
        </xsl:when>
        <xsl:otherwise>
            N/A
        </xsl:otherwise>
    </xsl:choose>

如果$rawdate格式正确(例如YYYY-MM-DD),这将有效。但是,如果格式不正确(例如DD-MM-YYYY),则format-date()函数将失败并且处理将停止。 $rawdate来自手工编辑的XML文件,因此有人可能无意中将日期格式化错误。

我想要做的是在format-date()失败(或已经失败)时捕获,这样我就可以优雅地处理它而不是停止转换。这可能吗?

1 个答案:

答案 0 :(得分:2)

使用castable as xs:date

<xsl:choose>
    <xsl:when test="$rawdate castable as xs:date">
        <xsl:variable name="dt" as="xs:date" select="$rawdate"/>
        <xsl:value-of select="format-date($dt, '[D01]-[MNn,*-3]-[Y0001]')"/>
    </xsl:when>
    <xsl:otherwise>
        N/A
    </xsl:otherwise>
</xsl:choose>