如果string-length()不起作用,则为XSLT

时间:2011-10-27 13:42:31

标签: xml xslt

我正在尝试使用字符串的长度来确定它是日期,还是日期和时间。日期将有10个字符,日期时间将为24.如果没有时间,则日历应将其解释为全天事件。

所以 - 这是我使用的if语句:

<xsl:variable name="alextest" select="string-length(gd:when/@startTime)" />
allDay:     <xsl:if test="$alextest&lt;12"> true </xsl:if>

但是if语句总是无法输出true,即使满足条件也是如此。

我已经以各种方式测试了逻辑,例如输出表达式的值

<xsl:value-of select="$alextest&lt;12"/>',

解析为true,因此比较有效。我也试过这个并且它有效,这似乎表明结构是正确的:

allDay:     <xsl:if test="0&lt;12"> true </xsl:if>,

我做错了什么?

非常感谢

亚历

1 个答案:

答案 0 :(得分:1)

&lt;低于。{} 13 < 12无法评估为真。我认为您需要<=形式的&lt;=>形式的&gt;

编辑:以下按预期工作,因此在您显示的代码之外仍然存在某些问题,或者值可能需要调整。确保变量的select表达式真正解析为某些内容。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <el1>123456789101112</el1>
    <el2>123456</el2>
    <el3>1234567891011121314</el3>
    <el4></el4>
</root>

<?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" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:output method="text"/>
    <xsl:template match="/*">
        <xsl:for-each select="*">
            <xsl:variable name="test" select="string-length(.)" />
            <xsl:if test="$test &lt; 12"><xsl:value-of select="local-name(.)"/>: shorter than 12&#10;</xsl:if>
        </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>