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.

XML handling in a template using Velocity

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