0

ハマった。私がやりたいことは、セル内の属性に番号を割り当てることです。これを行うには、テンプレートを呼び出し、呼び出したテンプレートにパラメーターを渡します。

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

リテラル文字列値がまだ使用されています。

4

1 に答える 1