为什么这个选择时测试总是正确的?

Why is this choose-when-test always true?

我在 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!='')" /> 等变体,但似乎没有任何效果。 我错过了什么?

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

基本上 <xsl:value-of select="boolean(string-length($orgDate)=10)" /> 使用布尔值字符串创建文本节点,return 布尔值使用 <xsl:sequence select="string-length($orgDate)=10" />.