我希望借助XSLT将XML文件转换为HTML文件。但我收到了一个错误,即
javax.xml.transform.TransformerException中: javax.xml.transform.TransformerException中: com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:无效 1字节UTF-8序列的字节1。
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文件
<?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代码
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();
}
}
}
答案 0 :(得分:1)
对我来说,这看起来像编码问题。尝试确保在所有情况下都能正确编码文件。
例如,将encoding="UTF-8"
添加到XML和XSLT文件中。但请注意,这只是一个声明 - 它不会改变角色本身。
此外,您可以将XML内容复制到一个简单的编辑器中,并将其明确保存为UTF-8。 例如,如果您使用的是Windows,请将内容复制到记事本中,然后按&#34;另存为...&#34;。在文件对话框中,您可以选择&#34; UTF-8&#34;从下拉列表。
答案 1 :(得分:0)
您的代码运行正常。问题stylesheet
节点未关闭。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
---
</xsl:template>
</xsl:stylesheet>
还要正确检查xsl路径或通过
进行测试Source xslDoc=new StreamSource("D:/NewStylesheet.xsl");`
答案 2 :(得分:0)
对于将XHTML页面转换为HTML的特殊情况,我们可以使用HTMLWriter
API中的dom4j。
@Test
public void givenXHTML_whenWrite_thenGetHTML() throws Exception {
String xml = "<?xml version='1.0' encoding='UTF-8' ?>" +
"<html> <body><![CDATA[First 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 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);
}