0

我有以下 XSLT 片段:

    <table border="1" id ="test">
    <xsl:for-each select= "TestSuite/TestCase">

                <tr>
                <xsl:attribute name="id">
                        <xsl:value-of select="count(preceding-sibling::*)"/>
                </xsl:attribute>
                <b><xsl:value-of select="@name"/></b>

                </tr>

                <xsl:for-each select="Verification|Command">
                        <tr>
                        <xsl:attribute name="id">
                            <xsl:value-of select="count(preceding-sibling::*)"/>
                        </xsl:attribute>
                        <xsl:choose>
                                <xsl:when test="contains(name() , 'Verification')">

                                <td>Verification <xsl:value-of select="@type"/></td>
                                <td><xsl:value-of select="@status"/></td>
                        </xsl:when>
                        <xsl:when  test="contains(name() , 'Command')">
                                <td>Command <xsl:value-of select="@type"/></td>
                                <td><xsl:value-of select="@status"/></td>
                        </xsl:when>
                        </xsl:choose>

                        </tr>


                </xsl:for-each>

      </xsl:for-each>
      </table>  

现在我只想给每个表行一个从 0、1 然后 2 等开始的 id。问题是每个内部循环都从 0 开始计算 id。我该如何解决这个问题?我的 HTML 页面只显示一个表,因此所有 tr 都应该是同级的。

4

2 回答 2

0

像这样的东西怎么样:

  <xsl:template match="something">
    <table border="1" id ="test">
      <xsl:apply-templates select="TestSuite/TestCase | 
                                   TestSuite/TestCase/*[self::Verification or
                                                        self::Command]" />
    </table>
  </xsl:template>

  <xsl:template match="TestSuite/TestCase">
    <tr id="{position()}">
      <td colspan="2">
        <b>
          <xsl:value-of select="@name"/>
        </b>
      </td>
    </tr>
  </xsl:template>

  <xsl:template match="TestCase/Verification | TestCase/Command">
    <tr id="{position()}">
      <td>
        <xsl:value-of select="concat(local-name(), @type)"/>
      </td>
      <td>
        <xsl:value-of select="@status"/>
      </td>
    </tr>
  </xsl:template>
于 2013-05-16T16:20:10.820 回答
0

而不是基于您id的位置,只需使用generate-id()

id="{generate-id()}"

这不仅是唯一的,而且也是一个有效的ID类型值。

于 2013-05-16T17:16:21.963 回答