返回顶部

收藏

Velocity 解析 XML 数据

更多

这段代码用来在Velocity模板中遍历XML数据

XMLTest.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 <a href="mailto:geirm@optonline.net">Geir Magnusson Jr.</a>
 * @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");
    }
}

test.xml

<?xml version="1.0" encoding="UTF-8"?>
<document>
  <properties>
    <author>
  <email>velocity-user@jakarta.apache.org</email>
  <name>
     <last>
    <full>Team</full>
    <firstinitial>T</firstinitial>
     </last>
     <first>
    Velocity
     </first>
  </name>
    </author>
    <title>
        The Jakarta Project
    </title>
  </properties>

  <body>
  I am the body
  </body>
</document>

xml.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 = " ")

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()

标签:jQuery,XML,Velocity

收藏

0人收藏

支持

0

反对

0

相关聚客文章
  1. Hiro 发表 2009-07-10 03:52:23 jQuery:书籍展示效果
  2. 歪脖骇客 发表 2016-05-05 03:53:37 使用jQuery解析XML
  3. Hiro 发表 2009-09-21 03:33:02 XPath:语法及示例,前端学习收集
  4. crazyFish 发表 2011-11-26 09:58:54 jquery raty服务器请求
  5. 设计 达人 发表 2016-08-23 06:13:28 全能 lightbox 灯箱插件: lightgallery.js
  6. BaiKeyang 发表 2016-10-19 09:11:30 jquery ajax超时设置
  7. 博主 发表 2013-02-01 00:00:00 jQuery 技术内幕
  8. 知更鸟 发表 2017-01-04 04:35:46 有选择性的在新窗口打开链接
  9. 博主 发表 2017-02-24 06:20:00 使用jquery-validate其实不必对radio 进行"非空"校验, 咱们给他一个初始值就好了
  10. 博主 发表 2017-05-28 09:30:00 写个pom.xml留着方便复制
  11. admin 发表 2017-09-01 11:30:22 jQuery
  12. ken 发表 2017-12-13 07:41:40 使用js赋值Select2后没变化不更新不显示

发表评论