根据属性值输出X个星号

时间:2014-11-08 23:04:04

标签: xslt-1.0

输出值X次。

这个问题一再让我感到厌烦,我通常按照我在这里展示的方式处理它,但我厌倦了做错事,想要学习更好的方法来做到这一点。

下面的代码演示了我想要实现的目标,但我不想写所有这些。我有一个变量($ast),它将输出我想要的星号数。当然,这可以通过更简单的方式完成。

<xsl:when test="$itm_lev = 0" >
        <xsl:value-of select="concat($itm_lev)"/>
</xsl:when>
<xsl:when test="$itm_lev = 1" >
        <xsl:value-of select="concat($ast,$itm_lev)"/>
</xsl:when>
<xsl:when test="$itm_lev = 2" >
        <xsl:value-of select="concat($ast,$ast,$itm_lev)"/>
</xsl:when>
<xsl:when test="$itm_lev = 3" >
        <xsl:value-of select="concat($ast,$ast,$ast,$itm_lev)"/>
</xsl:when>
<xsl:when test="$itm_lev = 4" >
        <xsl:value-of select="concat($ast,$ast,$ast,$ast,$itm_lev)"/>
</xsl:when>
<xsl:when test="$itm_lev = 5" >
        <xsl:value-of select="concat($ast,$ast,$ast,$ast,$ast,$itm_lev)"/>
</xsl:when>  

输出:

    0
    *1
    **2
    ***3
    ****4
    *****5

1 个答案:

答案 0 :(得分:1)

以下三个选项供您考虑:

<强> 1

<xsl:value-of select="substring('********************', 1, $itm_lev)"/>

需要预设最大星号(=以上星号字符串的长度);

2。

<xsl:value-of select="translate(math:power(10, $itm_lev) - 1, '90', '*')"/>

需要一个支持EXSLT math:power()扩展功能的处理器(大多数都支持)。请注意,根据您的特定处理器,当$ itm_lev&gt;时,这可能会爆炸。 15;

第3

调用递归命名模板。