2017-07-27 59 views
0

我有下面的XML,我试着将它转换成XSL,然后使用Java,将其转换为HTML,因此,该报告是用户友好,易于阅读。我做错了我的xsl转换 - 当我生成的HTML,它只包含标题。转换XML到XSL,然后到HTML

编辑:输出im期待是一个结果表。结果的表格格式。 例如: 测试套件:命名 时间取:0.0 故障:3

测试用例名:TEST2 制出:FOO酒吧

THIS IS MY XML:

<?xml version="1.0" encoding="UTF-8"?> 
<testsuites disabled="0" errors="0" failures="0" name="HealthCheck" tests="3" time="0.0"><testsuite tests="3" disabled="0" errors="0" failures="0" time="19.167" id="0" name="Scenario"><testcase classname="Test" name="test-0000001" time="0.441"><system-out>Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase><testcase classname="sheep" name="Check Responses-0000002" time="18.11"><system-out> 
Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase><testcase classname="dog" name="cat-0000003" time="0.032"><system-out> 
Overall status:SUCCESSFUL 
</system-out><system-err></system-err></testcase></testsuite></testsuites> 

这是我的XSL:

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 
<xsl:template match="/*"> 
<html> 
<head><title>Real's HowTo</title></head> 
<body> 
<table border="1"> 
<tr> 
<th>disabled</th> 
<th>errors</th> 
<th>failures</th> 
<th>name</th> 
<th>tests</th> 
<th>time</th> 
</tr> 
<xsl:for-each select="*"> 
<tr> 
<td><xsl:value-of select="testsuites[@disabled='disabled']"/></td> 
<td><xsl:value-of select="testsuites[@errors='errors']"/></td> 
<td><xsl:value-of select="testsuites[@failures='failures']"/></td> 
<td><xsl:value-of select="testsuites[@name='name']"/></td> 
<td><xsl:value-of select="testsuites[@tests='tests']"/></td> 
<td><xsl:value-of select="testsuites[@time='time']"/></td> 
</tr> 
</xsl:for-each> 
</table> 
</body></html> 
</xsl:template> 
</xsl:stylesheet> 

可选的Java代码:

public static void main(String[] args) { 
    try { 

    TransformerFactory tFactory = TransformerFactory.newInstance(); 

    Transformer transformer = 
     tFactory.newTransformer 
     (new javax.xml.transform.stream.StreamSource 
      ("howto.xsl")); 

    transformer.transform 
     (new javax.xml.transform.stream.StreamSource 
      ("howto.xml"), 
     new javax.xml.transform.stream.StreamResult 
      (new FileOutputStream("howto.html"))); 
    } 
    catch (Exception e) { 
    e.printStackTrace(); 
    } 
    } 
} 

我在HTML输出只显示标题。而不是行值。 林不知道如果我去这个正确的方式 - 我在这里粘贴的XML,我想转换成HTML报告看起来不错,易于阅读。

任何帮助,将不胜感激。

+0

您能编辑您的问题以包含您期望从输入中获得的输出吗?谢谢! –

+0

编辑,谢谢。 – JavaPotter

回答

0

澄清一点:您并未将XML转换为XSL。您正在将XML转换为HTML,使用 XSL来指定转换。

我想,你希望每个<testsuite>元素的表行(虽然有一个在XML只有一个这样的元素您提供)。

的问题是这些行:

<td><xsl:value-of select="testsuites[@disabled='disabled']"/></td> 
<td><xsl:value-of select="testsuites[@errors='errors']"/></td> 
<td><xsl:value-of select="testsuites[@failures='failures']"/></td> 
<td><xsl:value-of select="testsuites[@name='name']"/></td> 
<td><xsl:value-of select="testsuites[@tests='tests']"/></td> 
<td><xsl:value-of select="testsuites[@time='time']"/></td> 

首先,没有<testsuites>元件,其是一个<testsuite>元素的子元素。其次,[@disabled='disabled']手段“仅适用于具有disabled="disabled"属性的<测试包>元素返回文本。”

我敢肯定,你想要的是测试包(未测试包)的值属性本身,所以你不应该用[@disabled='disabled']等表达式对属性进行布尔测试。相反,请选择属性节点:

<td><xsl:value-of select="@disabled"/></td> 
<td><xsl:value-of select="@errors"/></td> 
<td><xsl:value-of select="@failures"/></td> 
<td><xsl:value-of select="@name"/></td> 
<td><xsl:value-of select="@tests"/></td> 
<td><xsl:value-of select="@time"/></td> 
+0

非常感谢,它的工作:) – JavaPotter