为什么选择何时测试总是如此?

时间:2015-02-06 09:09:52

标签: xslt saxon

在XSLT文件中,我定义了一个函数

<xsl:function name="my:isValidDate">
    <xsl:param name="orgDate" />

    <xsl:value-of select="boolean(string-length($orgDate)=10)" />
</xsl:function>

测试日期字符串是否具有有效长度。 当我使用这个功能时

        <xsl:choose>
            <xsl:when test="my:isValidDate(ValidFrom)">
                <xsl:call-template name="formatDate"><xsl:with-param name="orgDate" select="ValidFrom"></xsl:with-param></xsl:call-template>
            </xsl:when>
            ...
        </xsl:choose>
似乎总是如此;即使像<ValidFrom />这样的空标签也会通过测试并导致奇怪的输出,因为不能在空的或无效的日期字符串上调用模板。当我为调试问题输出ValidFrom时,它按预期为空。我还在函数中尝试了string-length($orgDate)=10<xsl:value-of select="boolean($orgDate!='')" />等变体,但似乎没有任何效果。 我错过了什么?

编辑:当我内联函数时,正确评估了这个条件?!

1 个答案:

答案 0 :(得分:2)

基本上<xsl:value-of select="boolean(string-length($orgDate)=10)" />创建一个带有布尔值字符串的文本节点,以使用<xsl:sequence select="string-length($orgDate)=10" />返回布尔值。