具有唯一选择ID的xslt调用模板

时间:2014-02-26 17:02:08

标签: xslt

我有以下模板,我用它来动态填充行,这样他们每个都有一个选择下拉列表:

<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”

1 个答案:

答案 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}" ...>