如何理解这个代码块,
<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/>
适用的模板是什么?
你能对这个问题提出任何线索吗?
我会高度评价你的帮助。
答案 0 :(得分:3)
正如hr_117所示,出于所有实际目的,代码
<xsl:for-each select="testsuite">
<xsl:apply-templates select="."/>
</xsl:for-each>
相当于
<xsl:apply-templates select="testsuite"/>
它实际上不是100%等效,所以在重写之前要小心谨慎:在第一种情况下,在所选模板中对position()
的调用将始终返回1,而在第二种情况下,它将返回位置兄弟测试元素中的测试套件。然而,这不太重要。
答案 1 :(得分:1)
<xsl:for-each select="testsuite">
语句迭代当前节点的所有子节点(testsuites
<xsl:apply-templates select="."/>
内的for-each
将“触发”testsuite
模板(未显示)。
因此,这会调用testsuite
模板(适用于儿童testsuite
)。
如果testsuite
个节点内存在testsuites
个节点,则只会执行此操作。
同样不需要for-each
<xsl:apply-templates select="testsuite"/>
也会这样做。