1

如何理解这个代码块,

<xsl:for-each select="testsuite">
  <xsl:apply-templates select="."/>
</xsl:for-each>

在下面使用,

<xsl:template match="testsuites">
    <table border="1" width="100%">
    <tr bgcolor="#9acd32">
      <th align="left">module</th>
      <th align="left">tests</th>
      <th align="left">time</th>
    </tr>
    <tr>
      <td><xsl:value-of select="@name"/></td>
      <td><xsl:value-of select="@tests"/></td>
      <td><xsl:value-of select="@time"/></td>
    </tr>
    </table>
    <br/>

    <xsl:for-each select="testsuite">
      <xsl:apply-templates select="."/>
    </xsl:for-each>
</xsl:template>

<xsl:apply-templates/>根据上面的代码,应用的模板是什么?你能就这个问题提供任何线索吗?

我会高度评价你的帮助。

4

2 回答 2

3

正如 hr_117 所示,出于所有实际目的,代码

<xsl:for-each select="testsuite">
  <xsl:apply-templates select="."/>
</xsl:for-each>

相当于

<xsl:apply-templates select="testsuite"/>

它实际上不是 100% 等价的,所以在重写之前要小心:在第一种情况下,position()在所选模板中的调用将始终返回 1,而在第二种情况下,它将返回测试套件在同级集合中的位置测试套件元素。然而,这不太重要。

于 2013-07-02T08:21:25.443 回答
1

<xsl:for-each select="testsuite">语句遍历当前节点的所有子节点(即. 内部testsuites将比
“触发”模板(未显示)。 <xsl:apply-templates select="."/>for-eachtestsuite

因此,这称为testsuite模板(用于 children testsuite)。testsuite只有在节点内部有节点时才会这样做testsuites

for-each也不需要<xsl:apply-templates select="testsuite"/>将做同样的事情。

于 2013-07-02T05:35:18.203 回答