ハマった。私がやりたいことは、セル内の属性に番号を割り当てることです。これを行うには、テンプレートを呼び出し、呼び出したテンプレートにパラメーターを渡します。
<xsl:call-template name="RowIdInitializer" >
<xsl:with-param name="i">1</xsl:with-param>
</xsl:call-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 のインクリメントされた値をテンプレートに渡していることに注意してください。各データ モードが Exist 属性を保持する for ループを模倣しようとしています (これは後で問題になる可能性があります。これは、RowIdInitializer への最初の呼び出しが、Row ノードで Exist 属性を探すために 1 レベル上から呼び出されるためです。
<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 を検査するとdata-SwipePage ="$iThis"
、行の子である各データ ノードに対して作成されたすべての td 要素を示す属性が取得されます。私はまた、このようなナンバーワンを渡そうとしました
<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>
リテラル文字列値がまだ使用されています。