1 #macro ( recursive $xml $indent ) 2 #if( $xml.getChildren().size() > 0 ) 3 $indent <$xml.getName()> 4 #foreach ($child in $xml.getChildren() ) 5 #recursive( $child "$indent " ) 6 #end 7 $indent </$xml.getName()> 8 #else 9 $indent <$xml.getName()> 10 $indent $xml.getTextTrim() 11 $indent </$xml.getName()> 12 #end 13 #end 14 15 #set($i = " ") 16 17 Here goes document tree with a recursive Velocity macro : 18 19 #recursive( $root.getRootElement() $i ) 20 21 22 Now accessing data directly : 23 24 email : $root.getRootElement().getChild("properties").getChild("author").getChild("email").getText() 25 last name : $root.getRootElement().getChild("properties").getChild("author").getChild("name").getChild("fullname").getText() 26