Home Xml Create a Java program using XSLT APIs
Questions:Ask|Latest

 
 

Share on Google+Share on Google+

Create a Java program using XSLT APIs

Advertisement
Now we will develop a class in Java that takes both XML and XSL file as an input and transforms them to generate a formatted HTML file.

Create a Java program using XSLT APIs

     

Now we will develop a class in Java that takes both XML and XSL file as an input and transforms them to generate a formatted HTML file.

Here is the source code of the SimpleXMLTransform.java:

 

 

 

 

 

 

import javax.xml.transform.ErrorListener;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;

public class SimpleXMLTransform {
  static public void main(String[] arg) {
  if(arg.length != 3) {
  System.err.println("Usage: SimpleXMLTransform " +
  "<input.xml> <input.xsl> <output>");
  System.exit(1);
  }
  String inXML = arg[0];
  String inXSL = arg[1];
  String outTXT = arg[2];

  SimpleXMLTransform st = new SimpleXMLTransform();
  try {
  st.transform(inXML,inXSL,outTXT);
  catch(TransformerConfigurationException e) {
  System.err.println("Invalid factory configuration");
  System.err.println(e);
  catch(TransformerException e) {
  System.err.println("Error during transformation");
  System.err.println(e);
  }
  }
  public void transform(String inXML,String inXSL,String outTXT)
  throws TransformerConfigurationException,
  TransformerException {

  TransformerFactory factory = TransformerFactory.newInstance();

  StreamSource xslStream = new StreamSource(inXSL);
  Transformer transformer = factory.newTransformer(xslStream);
  transformer.setErrorListener(new MyErrorListener());

  StreamSource in = new StreamSource(inXML);
  StreamResult out = new StreamResult(outTXT);
  transformer.transform(in,out);
  System.out.println("The generated HTML file is:" + outTXT);
  }
}
class MyErrorListener implements ErrorListener {
  public void warning(TransformerException e)
  throws TransformerException {
  show("Warning",e);
  throw(e);
  }
  public void error(TransformerException e)
  throws TransformerException {
  show("Error",e);
  throw(e);
  }
  public void fatalError(TransformerException e)
  throws TransformerException {
  show("Fatal Error",e);
  throw(e);
  }
  private void show(String type,TransformerException e) {
  System.out.println(type + ": " + e.getMessage());
  if(e.getLocationAsString() != null)
  System.out.println(e.getLocationAsString());
  }
}

This program uses three arguments to take inputs from the command line: arg[0] is for XML file, arg[1] is for XSL file, and arg[2] is for taking the name of the html file that will be generated after the transformation.

As in the earlier section, we have described the working process of XSLT APIs. First, this program creates an instance of the TransformerFactory class. The new instance of the Transformer class is created using an ? xslStream? instance of the StreamSource class. This instance of the Transformer class required for transformation to generate the formatted output as a result object. Its method transform(in,out) takes two arguments: the XML document as a source object and the result document as an output object in the form of HTML .

4. Compile and Run the Program

C:\nisha\xslt>javac SimpleXMLTransform.java

C:\nisha\xslt>java SimpleXMLTransform emp.xml emp.xsl emp.html

The generated HTML file is:emp.html 

The format of the generated output file ?emp.html? will look like this:

Advertisement

If you enjoyed this post then why not add us on Google+? Add us to your Circles



Liked it!  Share this Tutorial


Follow us on Twitter, or add us on Facebook or Google Plus to keep you updated with the recent trends of Java and other open source platforms.

Posted on: January 17, 2008

Related Tutorials

Ask Questions?    Discuss: Create a Java program using XSLT APIs   View All Comments

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments
Hasan
October 18, 2011
Error ArrayIndexOutOfBoundsException

Hi I use this code it works fine some xls file. but i put base64 image in xsl. Code generate html until the image. html end like these .....<img style="width:91px;" align="middle" alt="E-Fatura Logo" src=" Can you help me ? Error : ERROR: '' javax.xml.transform.TransformerException: java.lang.ArrayIndexOutOfBoundsException at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:716) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) at HowToXSLT.main(HowToXSLT.java:16) Caused by: java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at java.lang.String.getChars(String.java:854) at com.sun.org.apache.xml.internal.serializer.WriterToUTF8Buffered.write(WriterToUTF8Buffered.java:347) at com.sun.org.apache.xml.internal.serializer.ToHTMLStream.addUniqueAttribute(ToHTMLStream.java:1939) at x1.template$dot$0() at x1.applyTemplates() at x1.transform() at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) ... 2 more --------- java.lang.ArrayIndexOutOfBoundsException at java.lang.System.arraycopy(Native Method) at java.lang.String.getChars(String.java:854) at com.sun.org.apache.xml.internal.serializer.WriterToUTF8Buffered.write(WriterToUTF8Buffered.java:347) at com.sun.org.apache.xml.internal.serializer.ToHTMLStream.addUniqueAttribute(ToHTMLStream.java:1939) at x1.template$dot$0() at x1.applyTemplates() at x1.transform() at com.sun.org.apache.xalan.internal.xsltc.runtime.AbstractTranslet.transform(AbstractTranslet.java:603) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:709) at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313) at HowToXSLT.main(HowToXSLT.java:16)
kiran
January 17, 2012
Helped aot

Nice code saved time
DMCA.com