如何使用XSLT for-each计数器

时间:2013-04-22 11:02:17

标签: xml xslt

我正在尝试计算我在循环中的位置,以便我可以切换一些表格行。

这是我在每行中使用的计数器。

<xsl:variable name="i" select="position()"/>

我遇到的问题是我不知道如何将i指定为我的行ID,以便我页面中的每个表都可以打开和关闭自己的行,而不是打开和关闭一个按钮每张桌子的每一行。

这就是我的每个循环看起来像

<xsl:for-each select="Talents_Passive">

    <xsl:variable name="i" select="position()"/>

    <div style="font-family:Calibri, Arial; font-size:5pt">
        <xsl:if test="Talent != ''">
            <table border="0" width="550">

                <tr>
                    <td bgcolor="#A0A0A0" width="80%">
                        <a href="#" onClick="SwitchMenu(this, {$i})">Toggle Form?</a> <b id="toggle"><xsl:value-of select="Talent"/></b></td>
                    <td bgcolor="#A0A0A0" width="20%" align="center">
                        <xsl:value-of select="Cost"/><xsl:text>  -  </xsl:text><xsl:value-of select="Type"/></td>
                </tr>

                <xsl:if test="Prerequisite != ''">
                    <tr>
                        <td colspan="2" bgcolor="#C0C0C0"><b>Prerequisite: </b><xsl:value-of select="Prerequisite"/></td>
                    </tr>
                </xsl:if>

                <tr>
                    <td colspan="2" bgcolor="#C0C0C0"> 
                        <xsl:if test="Action != ''">
                            <b>Action: </b><xsl:value-of select="Action"/>
                        </xsl:if>
                        <xsl:if test="Range != ''">
                            <xsl:text>    </xsl:text> <b>Range: </b><xsl:value-of select="Range"/> 
                        </xsl:if>
                        <xsl:if test="Cost != ''">
                            <xsl:text>    </xsl:text> <b>Cost: </b><xsl:value-of select="Cost"/>
                        </xsl:if>
                    </td>
                </tr>   

                <xsl:if test="Action != ''">
                    <tr>
                        <!-- I would like to open and hide this row and give control to each table that is created in this for-each loop -->
                        <td colspan="2" bgcolor="#E0E0E0" id="{$i}" style="display:none;"><b>Action: </b><xsl:value-of select="Action"/></td>
                    </tr>
                </xsl:if>


            </table>
        </xsl:if>
    </div>

</xsl:for-each>

所以我想知道如何获取i的当前值并将其分配给我的行<td id="i">或其他内容。

1 个答案:

答案 0 :(得分:1)

看起来你应该将id和style="display:none;"从td移到tr。

<tr id="sh_{$i}" style="display:none;">

<!-- I would like to open and hide this row and give controll to each table that is creted in this for each loop -->
                    <td colspan="2" bgcolor="#E0E0E0" ><b>Action: </b><xsl:value-of select="Action"/></td>
   </tr>

你的javascript函数不仅要查找id,比如“sh_1”。