Xsl transform in Java working example (xml to html)

To display XML in a browser or transform it into other formats, you need a styling language. While CSS can handle basic layout, XSL (eXtensibleStylesheet Language) is the dedicated styling language for XML. XSL lets you convert XML into viewable outputs such as HTML, PDF, or plain text.
In this post, I’ll show you how to transform a simple XML file into an HTML table using a reusable Java class. The transformation leverages the standard javax.xml.transform API — no external libraries needed.

Transforming XML into multiple output formats

I’ll start with a user‑data XML file and an XSL stylesheet that maps the data into an HTML table.

Input XML (user.xml)
<?xml version="1.0" encoding="utf-8"?>
<users>
  <user>
    <username>ganesh</username>
    <fname>Ganesh</fname>
    <lname>Tiwari</lname>
    <job>Software Developer</job>
    <address>Chitwan Nepal</address>
  </user>
  <user>
    <username>ramesh</username>
    <fname>Ramesh</fname>
    <lname>Tiwari</lname>
    <job></job>
    <address>Kathmandu Nepal</address>
  </user>
  <user>
    <username>Harihari</username>
    <fname>Hari</fname>
    <lname>Tiwari</lname>
    <job></job>
    <address>Kathmandu Nepal</address>
  </user>
</users>

XSL Stylesheet (user.xsl) – Maps XML to an HTML Table

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>User Details</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>FirstName</th>
            <th>LastName</th>
            <th>Job</th>
            <th>Address</th>
          </tr>
          <xsl:for-each select="users/user">
            <tr>
              <td>
                <xsl:value-of select="fname" />
              </td>
              <td>
                <xsl:value-of select="lname" />
              </td>
              <td>
                <xsl:value-of select="job" />
              </td>
              <td>
                <xsl:value-of select="address" />
              </td>
            </tr>
          </xsl:for-each>
        </table>
      </body>
    </html>
  </xsl:template>
</xsl:stylesheet>

Java Transformer – A Reusable XSLT Wrapper

The XmlTransform class provides three overloaded getTransformedHtml methods, accepting File, String, or byte array inputs. It uses Java’s built‑in javax.xml.transform package, so no extra dependencies are required.

public class XmlTransform {
    public static String getTransformedHtml(File xmlFile, File xsltFile) throws TransformerException {
        byte[] xml = getStringFromFile(xmlFile).getBytes();
        byte[] xsl = getStringFromFile(xsltFile).getBytes();
        return getTransformedHtml(xml, xsl);
    }
    public static String getTransformedHtml(String xml, String xsl) throws TransformerException {
        return getTransformedHtml(xml.getBytes(), xsl.getBytes());
    }
    public static String getTransformedHtml(byte[] xml, byte[] xsl) throws TransformerException {
        Source srcXml = new StreamSource(new ByteArrayInputStream(xml));
        Source srcXsl = new StreamSource(new ByteArrayInputStream(xsl));
        StringWriter writer = new StringWriter();
        Result result = new StreamResult(writer);
        TransformerFactory tFactory = TransformerFactory.newInstance();
        Transformer transformer = tFactory.newTransformer(srcXsl);
        transformer.transform(srcXml, result);
        return writer.toString();
    }
    private static String getStringFromFile(File f) {
        StringBuilder sb = new StringBuilder(1000);
        try {
            Scanner sc = new Scanner(f);
            while (sc.hasNext()) {
                sb.append(sc.nextLine());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        return sb.toString();
    }
}

Testing the Transformation
public class TestXsl {
     public static void main(String[] args) throws TransformerException {
         final File xmlFile = new File("user.xml");
         final File xsltFile = new File("user.xsl");
         System.out.println(XmlTransform.getTransformedHtml(xmlFile, xsltFile));
     }
}

Generated HTML Output

<html>
<body>
<h2>User Details</h2>
<table border="1">
<tr bgcolor="#9acd32">
<th>FirstName</th><th>LastName</th><th>Job</th><th>Address</th>
</tr>
<tr>
<td>Ganesh</td><td>Tiwari</td><td>Software Developer</td><td>Chitwan Nepal</td>
</tr>
<tr>
<td>Ramesh</td><td>Tiwari</td><td></td><td>Kathmandu Nepal</td>
</tr>
<tr>
<td>Hari</td><td>Tiwari</td><td></td><td>Kathmandu Nepal</td>
</tr>
</table>
</body>
</html>

Rendered HTML Table

User Details

FirstNameLastNameJobAddress
GaneshTiwariSoftware DeveloperChitwan Nepal
RameshTiwariKathmandu Nepal
HariTiwariKathmandu Nepal



2 comments :

  1. java code needs working on... e.g. System.out.println(XmlTransform.getTransformedHtml(xmlFile, xsltFile)); :)

    ReplyDelete

Your Comment and Question will help to make this blog better...