如何使用Java中的XSLT将XML转换为HTML

时间:2021-08-19 21:50:05

I want to convert XML file into HTML file with help of XSLT. But I am getting an error i.e.

我想借助XSLT将XML文件转换为HTML文件。但我收到一个错误,即

javax.xml.transform.TransformerException: javax.xml.transform.TransformerException: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException: Invalid byte 1 of 1-byte UTF-8 sequence.

javax.xml.transform.TransformerException:javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:1字节UTF-8序列的无效字节1。

XML file

XML文件

<?xml version="1.0"?>
<Company>
    <Info>
            <EmpId>1</EmpId>
            <EmpName>John</EmpName>
            <Age>25</Age>
          <Salary>20000</Salary>
   </Info>
    <Info>
            <EmpId>2</EmpId>
            <EmpName>Tony</EmpName>
            <Age>27</Age>
            <Salary>23000</Salary>
    </Info>
    <Info>
            <EmpId>3</EmpId>
            <EmpName>Eithen</EmpName>
            <Age>29</Age>
            <Salary>25000</Salary>
    </Info>
</Company>

XSL file

XSL文件

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
   <xsl:template match="/">
      <html>
         <body>
            <h1>Company Details</h1>
            <table border="1">
               <tr>
                  <th>EmpId</th>
                  <th>EmpName</th>
                  <th>Age</th>
                  <th>Salary</th>
               </tr>
               <xsl:for-each select="Company/Info">
                  <tr>
                     <td>
                        <xsl:value-of select="EmpId" />
                     </td>
                     <td>
                        <xsl:value-of select="EmpName" />
                     </td>
                     <td>
                        <xsl:value-of select="Age" />
                     </td>
                     <td>
                        <xsl:value-of select="Salary" />
                     </td>
                  </tr>
               </xsl:for-each>
            </table>
         </body>
      </html>
   </xsl:template>
</xsl:stylesheet>

Java Code

Java代码

public class TransInfoHtml 
{
public static void main(String args[])
{
try {
        TransformerFactory tFactory=TransformerFactory.newInstance();

        Source xslDoc=new StreamSource("files/NewStylesheet.xsl");
        Source xmlDoc=new StreamSource("D:/Demo.xml");

        String outputFileName="CompanyInfo.html";

        OutputStream htmlFile=new FileOutputStream(outputFileName);
        Transformer trasform=tFactory.newTransformer(xslDoc);
        trasform.transform(xmlDoc, new StreamResult(htmlFile));
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    catch (TransformerConfigurationException e) 
    {
        e.printStackTrace();
    }
    catch (TransformerFactoryConfigurationError e) 
    {
        e.printStackTrace();
    }
    catch (TransformerException e) 
    {
        e.printStackTrace();
    }
}
}

2 个解决方案

#1


1  

To me, this looks like an encoding problem. Try to ensure that the files are encoded correctly in all cases.

对我来说,这看起来像编码问题。尝试确保在所有情况下都能正确编码文件。

For example, add encoding="UTF-8" to your XML and XSLT file. But note that this is only a declaration - it does not change the characters themselves.

例如,将encoding =“UTF-8”添加到XML和XSLT文件中。但请注意,这只是一个声明 - 它不会改变角色本身。

Also, you could copy your XML content into a simple editor and save it explicitly as UTF-8. For instance, if you are using windows, copy the content into notepad, hit "Save as...". In the file dialog, you can choose "UTF-8" from a drop-down.

此外,您可以将XML内容复制到一个简单的编辑器中,并将其显式保存为UTF-8。例如,如果您使用的是Windows,请将内容复制到记事本中,点击“另存为...”。在文件对话框中,您可以从下拉列表中选择“UTF-8”。

#2


0  

Your code works fine. In the question stylesheet node was not closed.

你的代码运行正常。在问题样式表节点未关闭。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
    ---
   </xsl:template>
</xsl:stylesheet>

Also check the xsl path properly or test by

还要正确检查xsl路径或进行测试

Source xslDoc=new StreamSource("D:/NewStylesheet.xsl");`

#1


1  

To me, this looks like an encoding problem. Try to ensure that the files are encoded correctly in all cases.

对我来说,这看起来像编码问题。尝试确保在所有情况下都能正确编码文件。

For example, add encoding="UTF-8" to your XML and XSLT file. But note that this is only a declaration - it does not change the characters themselves.

例如,将encoding =“UTF-8”添加到XML和XSLT文件中。但请注意,这只是一个声明 - 它不会改变角色本身。

Also, you could copy your XML content into a simple editor and save it explicitly as UTF-8. For instance, if you are using windows, copy the content into notepad, hit "Save as...". In the file dialog, you can choose "UTF-8" from a drop-down.

此外,您可以将XML内容复制到一个简单的编辑器中,并将其显式保存为UTF-8。例如,如果您使用的是Windows,请将内容复制到记事本中,点击“另存为...”。在文件对话框中,您可以从下拉列表中选择“UTF-8”。

#2


0  

Your code works fine. In the question stylesheet node was not closed.

你的代码运行正常。在问题样式表节点未关闭。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
    ---
   </xsl:template>
</xsl:stylesheet>

Also check the xsl path properly or test by

还要正确检查xsl路径或进行测试

Source xslDoc=new StreamSource("D:/NewStylesheet.xsl");`