How to convert XML to HTML using XSLT in Java

I want to convert an XML file to an HTML file using XSLT. But I get an error message.

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

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(); } } } 
+6
source share
3 answers

For me, this seems like an encoding issue. Try to ensure the correct encoding of files in all cases.

For example, add encoding="UTF-8" to your XML and XSLT file. But keep in mind that this is only an announcement - it does not change the characters themselves.

In addition, you can copy your XML content into a simple editor and save it explicitly as UTF-8. For example, if you use windows, copy the contents to notepad, click "Save As ...". In the file dialog box, you can select "UTF-8" from the drop-down list.

+1
source

Your code is working 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 is correct or check

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

For the special case of converting XHTML pages to HTML, we can use the HTMLWriter from the dom4j API .

 @Test public void givenXHTML_whenWrite_thenGetHTML() throws Exception { String xml = "<?xml version='1.0' encoding='UTF-8' ?>" + "<html> <body><![CDATA[First&nbsp;test]]> " + "<img alt=\"W3C\" height=\"48\" width=\"72\" src=\"http://www.w3.org/Icons/w3c_home\" />" + "</body> </html>"; Document document = DocumentHelper.parseText(xml); StringWriter buffer = new StringWriter(); HTMLWriter writer = new HTMLWriter(buffer); String expects = "\n<html>\n" + " <body>First&nbsp;test\n " + "<img alt=\"W3C\" height=\"48\" width=\"72\" src=\"http://www.w3.org/Icons/w3c_home\">\n " + "</body>\n" + "</html>\n"; writer.write(document); String output = buffer.toString(); assertThat(output).isEqualTo(expects); } 
0
source

Source: https://habr.com/ru/post/957499/


All Articles