繁体   English   中英

将XML转换为XSL,然后转换为HTML

[英]Convert XML to XSL and then to HTML

我有以下XML,我试图将其转换为XSL,然后使用java,将其转换为HTML,以使该报告易于使用且易于阅读。 我在xsl转换中做错了什么-当我生成html时,它仅包含标题。

编辑:我期望的输出是结果表。 结果的表格格式。 例如:测试套件:命名时间:0.0失败次数:3

测试用例名称:test2系统输出:foo bar

等等

这是我的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报告。

任何帮助,将不胜感激。

需要澄清的一点是:您没有将XML转换为XSL。 您正在使用 XSL指定转换,将XML转换为HTML。

我假设您希望每个<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']意思是“仅返回具有test disabled="disabled"属性的<testsuites>元素的文本。”

我很确定您想要的是testsuite(而不是testsuites)属性本身的值,因此您不应使用[@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>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM