我有以下模板,我用它来动态填充行,这样他们每个都有一个选择下拉列表:
<xsl:template name="MessageTimesOptionsFrom">
<xsl:param name="selected" />
<select id="StartTime" name="StartTime">
<xsl:apply-templates select="exslt:node-set($MessageTimesFrom)/option" mode="o">
<xsl:with-param name="selected" select="$selected" />
</xsl:apply-templates>
</select>
</xsl:template>
<xsl:variable name="MessageTimesFrom">
<option value="">From</option>
<option value="00:00">12:00am</option>
<option value="00:10">12:10am</option>
<option value="00:20">12:20am</option>
<option value="00:30">12:30am</option>
<option value="00:40">12:40am</option>
<option value="00:50">12:50am</option>
<option value="01:00">1:00am</option>
</xsl:variable>
并且html看起来像这样:
<div class="dropdown_container">
<xsl:call-template name="MessageTimesOptionsFrom">
<xsl:with-param name="selected">
<xsl:value-of select="$starttime" />
</xsl:with-param>
</xsl:call-template>
</div>
要处理表单,我将需要每个“select”具有唯一ID。在xsl或html中调用模板时有没有办法做到这一点?现在,每一行下拉列显然都有相同的ID - “StartTime”
答案 0 :(得分:0)
通常,XSLT会将一些输入节点映射到一个HTML输出元素,您可以在其上调用generate-id()
,所以假设您有这样的输入节点。
<xsl:template match="foo">
<div class="dropdown_container">
<xsl:call-template name="MessageTimesOptionsFrom">
<xsl:with-param name="id" select="generate-id()"/>
<xsl:with-param name="selected" select="$starttime" />
</xsl:call-template>
</div>
</xsl:template>
然后你可以使用
<xsl:template name="MessageTimesOptionsFrom">
<xsl:param name="id"/>
<xsl:param name="selected" />
<select id="StartTime{$id}" name="StartTime">
<xsl:apply-templates select="exslt:node-set($MessageTimesFrom)/option" mode="o">
<xsl:with-param name="selected" select="$selected" />
</xsl:apply-templates>
</select>
</xsl:template>
当然,根据您的需要,您只需使用<select id="{$id}" ...>
。