7

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

3 に答える 3

0

XHTML ページを HTML に変換する特殊なケースでは、 dom4j APIHTMLWriterからを使用できます。

@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);
}
于 2019-07-30T14:27:51.833 に答える