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");`