How to convert XML to HTML using XSLT in Java

27,255

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.

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.

Share:
27,255
Admin
Author by

Admin

Updated on July 09, 2022

Comments

  • Admin
    Admin almost 2 years

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

    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.

    XML file

    <?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

    <?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

    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();
        }
    }
    }