我有一个xml as,
的test.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="htmlConvertor.xsl"?>
<testrun name="TestAll (10)" project="ProjectName" tests="8" started="8" failures="0" errors="0" ignored="0">
<testsuite name="testall" time="1.1">
<testsuite name="package_1" time="1.1">
<testcase name="test_1" classname="class_1" time="0.918"/>
</testsuite>
</testsuite>
</testrun>
这里我想生成一个带有上面xml数据的html表,我有一个xsl,如下所示,
htmlConvertor.xsl
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="/">
<html>
<body>
<h2><center>Junit Results</center></h2>
<h3>
Project :
<xsl:value-of select="testrun/@project"></xsl:value-of>
</h3>
<h3>
Total Tests :
<xsl:value-of select="testrun/@tests"></xsl:value-of>
</h3>
<h3>
Fail :
<xsl:value-of select="testrun/@failures"></xsl:value-of>
</h3>
<h3>
Errors :
<xsl:value-of select="testrun/@errors"></xsl:value-of>
</h3>
<h3>
Ignored :
<xsl:value-of select="testrun/@ignored"></xsl:value-of>
</h3>
<table border="1">
<tr bgcolor="#9acd32">
<th>
<b>Class Name</b>
</th>
<th>
<b>Method Name</b>
</th>
<th>
<b>Status</b>
</th>
<th>
<b>Execution Time</b>
</th>
</tr>
<xsl:for-each select="testrun/testsuite/testsuite/testcase">
<tr>
<td>
<xsl:value-of select="@classname" />
</td>
<td>
<xsl:value-of select="@name" />
</td>
<xsl:variable name="result" select="failure"></xsl:variable>
<xsl:choose>
<!-- <xsl:value-of select="$result"></xsl:value-of> -->
<xsl:when test="$result != '' ">
<td bgcolor="#F51707">
<b>Fail</b>
</td>
</xsl:when>
<xsl:otherwise>
<td bgcolor="#07F54B">
<b>Pass</b>
</td>
</xsl:otherwise>
</xsl:choose>
<td>
<xsl:value-of select="@time" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
我在同一本地目录中有xml和xsl文件。但是当我在firefox 18和firefox 28中打开xml时,xlst没有应用,它显示为空白页面。在IE 8中,它显示没有任何xslt的xml内容。
注意:我尝试复制粘贴here中的xml和xsl代码并在那里工作。
我在哪里错了?有任何帮助或建议吗?
答案 0 :(得分:0)
此刻我无法发表评论......
尝试将XSL文档另存为XSLT文档并更改此行:
<?xml-stylesheet type="text/xsl" href="htmlConvertor.xsl"?>
在您的XML文档中;
<?xml-stylesheet type="text/xsl" href="htmlConvertor.xslt"?>
答案 1 :(得分:0)
一个问题是,当您匹配根节点testrun
时,您在节点/
上进行了匹配,然后您再次在模板正文中使用该名称。将testrun
替换为.
,表示当前或匹配的节点:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html"/>
<xsl:template match="testrun">
<html>
<body>
<h2><center>Junit Results</center></h2>
<h3>
Project :
<xsl:value-of select="./@project"></xsl:value-of>
</h3>
<h3>
Total Tests :
<xsl:value-of select="./@tests"></xsl:value-of>
</h3>
<h3>
Fail :
<xsl:value-of select="./@failures"></xsl:value-of>
</h3>
<h3>
Errors :
<xsl:value-of select="./@errors"></xsl:value-of>
</h3>
<h3>
Ignored :
<xsl:value-of select="./@ignored"></xsl:value-of>
</h3>
<table border="1">
<tr bgcolor="#9acd32">
<th>
<b>Class Name</b>
</th>
<th>
<b>Method Name</b>
</th>
<th>
<b>Status</b>
</th>
<th>
<b>Execution Time</b>
</th>
</tr>
<xsl:for-each select="./testsuite/testsuite/testcase">
<tr>
<td>
<xsl:value-of select="@classname" />
</td>
<td>
<xsl:value-of select="@name" />
</td>
<xsl:variable name="result" select="failure"></xsl:variable>
<xsl:choose>
<!-- <xsl:value-of select="$result"></xsl:value-of> -->
<xsl:when test="$result != '' ">
<td bgcolor="#F51707">
<b>Fail</b>
</td>
</xsl:when>
<xsl:otherwise>
<td bgcolor="#07F54B">
<b>Pass</b>
</td>
</xsl:otherwise>
</xsl:choose>
<td>
<xsl:value-of select="@time" />
</td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>