Home Apachevelocity XML handling in a template using Velocity



XML handling in a template using Velocity
Posted on: August 27, 2008 at 12:00 AM
This Example shows you how to use XML file in a velocity template and also shows that use of macro to wrap HTML tag in velocity template.

XML handling in a template using Velocity

     

This Example shows you how to use XML file in a velocity template and also shows that use of  macro to wrap HTML tag in velocity  template. The method used in this example are described below:-  
1:- Initialize velocity run time engine through method  init().
2:- Create object of VelocityContext Class.
3:- Create Template class object, Template  class object is used for controlling template methods and properties.

template.merge(context, writer): Merge method of the Template class is used here for merging  the VelocityContext class object to produce the output.

#macro ( recursive $e $indent ): This is the method for creating function in .vm file.

#recursive( $root.getRootElement() $i ): This is used to call recursive function that we have already created.

 

 

XMLHandling.java

package velocity.XML;

import java.io.*;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;

import org.jdom.Document;
import org.jdom.input.SAXBuilder;

public class XMLHandling {

  public static void main(String args[]) {
  try {
  Velocity.init();

  SAXBuilder builder;
  Document root = null;
  try {
  builder = 
new 
SAXBuilder("org.apache.xerces.parsers.SAXParser");
 root = builder.build("./src/velocity/XML/handling.xml");
  catch (Exception e) {
  System.out.println(e);
  }

  VelocityContext context = new VelocityContext();
  context.put("root", root);

  Template template = 
Velocity.getTemplate
("./src/velocity/XML/handling.vm");

      StringWriter writer = new StringWriter();
  template.merge(context, writer);

  System.out.println(writer);
  catch (Exception e) {
  System.out.println(e);
  }

  }
}

handling.xml

<?xml version="1.0" encoding="UTF-8"?>
<document>
  <student>
  <rno>1</rno>
  <name>Komal</name>
  </student>
  <student>
  <rno>2</rno>
  <name>Sandy</name>
  </student>
  <student>
  <rno>3</rno>
  <name>Ajay</name>
  </student>
</document>

ClassMethods.vm

#macro ( recursive $e $indent )   
  #if( $e.getChildren().size() > 0 )
  $indent <$e.getName()>
  #foreach ($child in $e.getChildren() )
  #recursive( $child "$indent  " )
  #end
  $indent </$e.getName()>
  #else
  $indent <$e.getName()>
  $indent  $e.getTextTrim()
  $indent </$e.getName()>
  #end
#end

#set($i = " ")

Handling.xml

#recursive( $root.getRootElement() $i )

Data directly :

Rno  : $root.getRootElement()
   .getChild("student").getChild("rno").getText()
Name : $root.getRootElement()
  .getChild("student").getChild("name").getText()

Output :

Handling.xml
<document>
  <student>
  <rno>1</rno>
  <name>Komal</name>
  </student>
  <student>
  <rno>2</rno>
  <name>Sandy</name>
  </student>
  <student>
  <rno>3</rno>
  <name>Ajay</name>
  </student>
</document>

Data directly :

Rno  : 1
Name : Komal

Download code

Related Tags for XML handling in a template using Velocity:
htmlcxmlmacfiletemplatemacrotagthisvelocityshowwrapexampletoexamciwssheilitocilsuseinmlmtempemlochowxaxampssoatlatehtmishamplandcityxmssthshoaphatlsopleplndo


More Tutorials from this section

Ask Questions?    Discuss: XML handling in a template using Velocity  

Post your Comment


Your Name (*) :
Your Email :
Subject (*):
Your Comment (*):
  Reload Image
 
 

Ask Questions?

If you are facing any programming issue, such as compilation errors or not able to find the code you are looking for.

Ask your questions, our development team will try to give answers to your questions.