Param和XSLT应用模板

时间:2013-10-09 19:48:36

标签: xml templates xslt

我被困住了。我想要做的是为我的单元格中的属性分配一个数字。我这样做是通过调用模板并将一个参数传递给我调用的模板。

 <xsl:call-template name="RowIdInitializer" >
    <xsl:with-param name="i">1</xsl:with-param>        
  </xsl:call-template>

然后我使用该param并将其作为param传递给apply-template

<xsl:template name="RowIdInitializer">
<xsl:param name="i" />   
   <xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis" select="$i"/>             
  </xsl:apply-templates>

<xsl:if test="@Exsist">
  <xsl:call-template name="RowIdInitializer">
    <xsl:with-param name="i" select="$i + 1">         
    </xsl:with-param>        
  </xsl:call-template>
</xsl:if>
</xsl:template>

请注意,然后我从内部调用模板(递归),并在我调用自身时将增加的param值传递给模板。试图模仿for循环,其中每个数据模式都有一个属性Exist(这可能是一个问题,因为第一次调用RowIdInitializer从一个级别调用,它可能在Row节点中寻找Exist属性,< / p>

<xsl:template match="Row">
   ..... some other stuff     
  <xsl:call-template name="RowIdInitializer" >
    <xsl:with-param name="i">1</xsl:with-param>        
  </xsl:call-template>
</xsl:template>

但这不是指出问题的问题。传递给应用模板的参数是将其分配给属性data-swipepage的位置。

<xsl:template select="Data" mode="table" >
 <xsl:param name="iThis" />  
<td class="dataTableCell" onblur="cellEvent(event)" data-SwipePage ="$iThis">     
 ..otherstuff...
</td>   

这就是问题所在。该值未被传递,并且字符串文字被指定为值。这样当我在浏览器中的开发控制台中检查HTML时,我得到一个属性,该属性为所有为行的子节点的每个数据节点创建的td元素都显示data-SwipePage ="$iThis"。我也尝试过像这样的第一个

<xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis" select="1"/>             
  </xsl:apply-templates>

<xsl:apply-templates select="Data" mode="table" >
    <xsl:with-param name="iThis">1 </xsl:with-pam>             
  </xsl:apply-templates>

我也试过像这样打破所有<xsl:with-param的with-param

 <xsl:with-param name="iThis">
      <xsl:value-of select="$i"/>
    </xsl:with-param>

并且文字字符串值仍在使用。

1 个答案:

答案 0 :(得分:1)

如果没有完全评估你的代码,上面有一个明显的嘘声,你需要用{和}来包围变量$ iThis,例如:

<xsl:template select="Data" mode="table" >
 <xsl:param name="iThis" />  
<td class="dataTableCell" onblur="cellEvent(event)" data-SwipePage ="{$iThis}">     
 ..otherstuff...
</td>