我被困住了。我想要做的是为我的单元格中的属性分配一个数字。我这样做是通过调用模板并将一个参数传递给我调用的模板。
<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>
并且文字字符串值仍在使用。
答案 0 :(得分:1)
如果没有完全评估你的代码,上面有一个明显的嘘声,你需要用{和}来包围变量$ iThis,例如:
<xsl:template select="Data" mode="table" >
<xsl:param name="iThis" />
<td class="dataTableCell" onblur="cellEvent(event)" data-SwipePage ="{$iThis}">
..otherstuff...
</td>