XSLT转换 - XML到HTML

时间:2014-04-30 14:40:27

标签: java html xml xslt xslt-1.0

我有一个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代码并在那里工作。

我在哪里错了?有任何帮助或建议吗?

2 个答案:

答案 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>