首页 新闻 搜索 专区 学院

关于xml xslt 转换

0
悬赏园豆:50 [待解决问题]

现有如下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每次都输出 我只要它输出一次 然后输出它的全部子节点 有人知道吗

xny的主页 xny | 初学一级 | 园豆:154
提问于:2012-08-31 13:44
< >
分享
所有回答(3)
0
<xsl:if test= "position() = 1 "> 

  <tr>
    <td colspan="3">Section: <xsl:value-of select="../@id"/></td>
   </tr>

</xsl:if> 

这样?

向往-SONG | 园豆:4853 (老鸟四级) | 2012-08-31 14:11
0

你这样第二个section 就输不出了

后来这样可以了 取test的放在一个template, 取section用for-each

xny | 园豆:154 (初学一级) | 2012-08-31 16:09
0

只用js的话可以通过ie浏览器的activexobject 先把xml 转换table表格,然后把table转换execl,不过存在兼容性问题,只能是ie

Web 前台 | 园豆:23 (初学一级) | 2012-09-02 21:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册