Velocity Java

/*
 * Copyright 2000,2004 The Apache Software Foundation.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.io.Writer;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.Template;
import org.apache.velocity.app.Velocity;
import org.jdom.Document;
import org.jdom.input.SAXBuilder;
/**
 * Example to show basic XML handling in a template.
 *
 * @author Geir Magnusson Jr.
 * @version $Id: XMLTest.java,v 1.2.12.1 2004/03/04 00:18:30 geirm Exp $
 */
public class XMLTest
{
    public XMLTest( String templateFile)
    {    
        Writer writer = null;
        try
        {
            /*
             *  and now call init
             */
            Velocity.init();
                       
            /*
             * build a Document from our xml
             */
            SAXBuilder builder;
            Document root = null;
            try 
            {
                builder = new SAXBuilder(  "org.apache.xerces.parsers.SAXParser" );
                root = builder.build("./src/test.xml");
            }
            catch( Exception ee)
            { 
                System.out.println("Exception building Document : " + ee);
                return;
            }
            /*
             * now, make a Context object and populate it.
             */
            VelocityContext context = new VelocityContext();
            context.put("root", root);
            /*
             *  make a writer, and merge the template 'against' the context
             */
 
            Template template = Velocity.getTemplate(templateFile);
            writer = new BufferedWriter(new OutputStreamWriter(System.out));
            template.merge( context , writer);  
        }
        catch( Exception e )
        {
           System.out.println("Exception : " + e);
        }
        finally
        {
            if ( writer != null)
            {
                try
                {
                    writer.flush();
                    writer.close();
                }
                catch( Exception ee )
                {
                    System.out.println("Exception : " + ee );
                }
            }
        }
    }
    public static void main(String[] args)
    {
        XMLTest t;
        t = new XMLTest("./src/xml.vm");
    }
}
-------------------------------------------------------------------------------------
//File: test.xml


  
    
  velocity-user@jakarta.apache.org
  
     
    Team
    T
     

     
    Velocity
     

  

    

    <br/>        The Jakarta Project<br/>    
  

  
  I am the body
  

-------------------------------------------------------------------------------------
//File: xml.vm
#macro ( recursive $e $indent )     
    #if( $e.getChildren().size() > 0 )
        $indent <$e.getName()> 
        #foreach ($child in $e.getChildren() ) 
            #recursive( $child "$indent  " )
        #end
        $indent 
    #else
        $indent <$e.getName()>
        $indent    $e.getTextTrim()
        $indent 
    #end
#end
#set($i = " ")
First, we print out the document tree with a 
recursive Velocimacro :
#recursive( $root.getRootElement() $i )
Next, we access pieces of data directly :
email : $root.getRootElement().getChild("properties").getChild("author").getChild("email").getText()
last name :  $root.getRootElement().getChild("properties").getChild("author").getChild("name").getChild("last").getChild("full").getText()
           
       
velocity-XML-handling-in-a-template.zip( 2,195 k)