我的xml中有两个节点,它们是动态生成的
<xml>
<start>4</start>
<end>14</end>
</xml>
我想在选择框中的开始到结束之间循环,我尝试了类似下面的内容但显示单个值。
<xsl:for-each select="/doc/start[position() <= /doc/end]">
<option value=""><xsl:value-of select="position()"/></option>
</xsl:for-each>
实际上我想要的是使用来自nodes.like
的值在选择框中生成动态选项<select>
<option>4</option>
<option>5</option> --- so on till end value
</select>
我使用递归模板解决了上述问题,下面是我的解决方案
<select class="small" name="" >
<xsl:call-template name="ascYear">
<xsl:with-param name="count" select="/doc/start"/>
</xsl:call-template>
</select>
<xsl:template name="ascYear">
<xsl:param name="count" select="1"/>
<xsl:if test="$count <= doc/end">
<option value="{$count}"><xsl:value-of select="$count"/></option>
<xsl:call-template name="ascYear">
<xsl:with-param name="count" select="$count + 1"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
希望它可以帮助某人
答案 0 :(得分:1)
最好使调用模板上下文独立,因此即使xml格式发生更改,也可以使用它。
<xsl:template match="/">
<select>
<xsl:call-template name="generate-options">
<xsl:with-param name="current" select="xml/start"/>
<xsl:with-param name="end" select="xml/end"/>
</xsl:call-template>
</select>
</xsl:template>
<xsl:template name="generate-options">
<xsl:param name="current"/>
<xsl:param name="end"/>
<xsl:if test="$current <= $end">
<option><xsl:value-of select="$current"/></option>
<xsl:call-template name="generate-options">
<xsl:with-param name="current" select="$current + 1"/>
<xsl:with-param name="end" select="$end"/>
</xsl:call-template>
</xsl:if>
</xsl:template>
答案 1 :(得分:0)
解决上述问题
<select class="small" name="" >
<xsl:call-template name="ascYear">
<xsl:with-param name="count" select="/doc/start"/>
</xsl:call-template>
</select>
<xsl:template name="ascYear">
<xsl:param name="count" select="1"/>
<xsl:if test="$count <= doc/end">
<option value="{$count}"><xsl:value-of select="$count"/></option>
<xsl:call-template name="ascYear">
<xsl:with-param name="count" select="$count + 1"/>
</xsl:call-template>
如果某人有更好更有效的解决方案,请告诉我们。