0
循環的錯誤我有一個for循環在我的XSLT文件,它使用了一個可以工作:在XSLT
<xsl:template name="for.loop">
<xsl:param name="i" />
<xsl:param name="count" />
<xsl:if test="$i <= $count">
<colspec colname="{concat('c',$i)}"/>
</xsl:if>
<xsl:if test="$i <= $count">
<xsl:call-template name="for.loop">
<xsl:with-param name="i">
<xsl:value-of select="$i + 1"/>
</xsl:with-param>
<xsl:with-param name="count">
<xsl:value-of select="$count"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
正如你可以看到,這個模板基本上是一個for循環結構適合於創建Cals表模型的「Colspec」節點。我傳遞給它的參數只是一個存儲索引,它應該是1和一個計數,這意味着應該創建多少個「Colspec」節點。
然後我把這個模板,如:
<xsl:variable name="value">
<xsl:value-of select="number($colsCount)+number($multiRowCellCount2)"/>
</xsl:variable>
<xsl:attribute name="cols">
<xsl:value-of select="$value"/>
</xsl:attribute>
<xsl:call-template name="for.loop">
<xsl:with-param name="i">1</xsl:with-param>
<xsl:with-param name="count"><xsl:value-of select="$value"/></xsl:with-param>
</xsl:call-template>
奇怪的是,我的地步了「$值」是9,屬性9是「@cols」正確分配,但「 Colspecs「節點已創建89次!但是,當我嘗試另一個文檔時,當「$ value」爲5時,「@cols」和#of「Colspecs」都是正確的。
我迷失在這裏,爲什麼當實際計數只有9時for循環會重複89次?
什麼是您的XML解析器,這使用微軟的工作正常。我能想到的唯一想法就是將所有變量都包含在數字子句中,以便在測試中使用'number($ i)< = number($ count)',並且在調用模板'number($ i)+ 1 ' –
@Bob Vale是完全正確的。我可以在Saxon HE 9.3中重現錯誤,如果我將'number()'添加到測試中,它可以正常工作。 –
@鮑勃,謝謝。這絕對是解決方案,我根本沒有意識到這一點。只需要好奇它爲什麼對5這樣的數字起作用,而對9卻不起作用。 – Kevin