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.

Ads

Tutorials   
JAXB Create XML File And Get Data From XML XML,XML Tutorials,Online XML Tutorial,XML Help Tutorials The Simple API for XML (SAX) APIs Part I XML,XML Tutorials,Online XML Tutorial,XML Help Tutorials XML Tutorial Ignoring Comments While Parsing an XML File Accessing XML file from Java Preventing Expansion of Entity References Getting next Tag in the XML File Replacing a Node with a New One Reading XML Data from a Stream Reading an XML document using JDOM Query XML with an XPath expression Normalize All of the Text in a Document Modifying Text by Replacement Insert a Processing Instruction and a Comment Node Getting text values from a NodeList Finding an ID Value and Print the Element Text Edit Text by Insertion and Replacement Duplicating a Subtree Deleting Two Attributes Delete the First Child of the Root Node Creating XML Tree Creating a DocumentFragment Subtree and Appending it to the Document Creates element node, attribute node, comment node, processing instruction and a CDATA section Creates a New DOM Parse Tree Replacing a Text Node with a New CDATA Section Node Create an Empty DOM Document Adding an Attribute in DOM Document Transforming XML with XSLT Transforming an XML File with XSL Transforming XML with SAXFilters Storing properties in XML file Testing EntityReferences in Xml Splitting One Text Node into Three Reading XML from a File Modifying Text by Cutting and Pasting Locating a Node by Using Siblings Locate a Node and Change Its Content Loading properties from a XML file Listing nodes used in a document Inserting a New Entry in a List Creating an InlineStreamFilter Ignoring Comments While Parsing an XML File Handling Errors While Parsing an XML File Emitting DOCTYPE Declaration while writing XML File Converting CDATA Nodes into Text Nodes Java DOM Tutorial Creating Blank DOM Document
Ads

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:

Advertisements

Ads
Share on Google+Share on Google+

Create a Java program using XSLT APIs

Posted on: January 17, 2008 If you enjoyed this post then why not add us on Google+? Add us to your Circles

Advertisements

Ads
 

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

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 
Comments:2
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

Ads

 

Ads