现有如下xml
<?xml version="1.0" encoding="utf-8" ?>
<testresults>
<section id="id1">
<test name="id1-case1" result="Passed" error="" />
<test name="id1-case2" result="Failed" error="msg" />
</section>
<section id="id2">
<test name="case1" result="Passed" error="" />
</section>
</testresults>
要转换成下面的table
<table>
<tr>
<td colspan="3">id1</td>
</tr>
<tr>
<td>id1-case1</td>
<td>Passed</td>
<td></td>
</tr>
<tr>
<td>id1-case2</td>
<td>Failed</td>
<td>msg</td>
</tr>
<tr>
<td colspan="3">id2</td>
</tr>
<tr>
<td>id2-case1</td>
<td>Passed</td>
<td></td>
</tr>
</table>
xslt:
<table border="1" style="width:100%">
<tr bgcolor="#9acd32">
<th>Case</th>
<th>Status</th>
<th>Comment</th>
</tr>
<xsl:for-each select="testresults/section/test">
<tr>
<td colspan="3">Section: <xsl:value-of select="../@id"/></td>
</tr>
<tr>
<td><xsl:value-of select="@name"/></td>
<td><xsl:value-of select="@result"/></td>
<td><xsl:value-of select="@error"/></td>
</tr>
</xsl:for-each>
</table>
但是这样写 section每次都输出 我只要它输出一次 然后输出它的全部子节点 有人知道吗
<xsl:if test= "position() = 1 "> <tr> <td colspan="3">Section: <xsl:value-of select="../@id"/></td> </tr> </xsl:if>
这样?
你这样第二个section 就输不出了
后来这样可以了 取test的放在一个template, 取section用for-each
只用js的话可以通过ie浏览器的activexobject 先把xml 转换table表格,然后把table转换execl,不过存在兼容性问题,只能是ie