转载必须注明文章来源:renjie120.iteye.com

关于freemarker的recurse的用途,在百度和中文指南中,有很多的说明,都是千篇一律。

找了半天却没有找到关于如何具体对一个xml进行遍历解析的例子。

这里给出一个示例的例子:

xml文件:

<book><title>spring &amp; struts2 &amp; hibernate</title><chapter author="周润发" address="上海"><title>第一章</title><para>1.1节</para><para>1.2节</para></chapter><chapter author="刘德华" time="2013-1-1"><title>第二章</title><para>2.1节</para><para>2.2节</para><para>2.3节</para></chapter>
</book>

ftl文件:

<#compress>
<#recurse doc>
<#macro book> 欢迎使用本书籍---------------<#recurse></#macro> <#macro title>   标题 《<#recurse>》</#macro>
<#macro chapter>
<#-- <#if .node.@address??> 地点:${.node.@address}</#if> -->----作者:${.node.@author}   <#if  .node.@time[0]?? >创作时间:${.node.@time}</#if>   <#if  .node.@address[0]?? >创作地点:${.node.@address}</#if>  <#recurse></#macro> <#macro para> 细节: <#recurse>
</#macro></#compress>

java代码:

public class XmlMarkerTest {public static void main(String[] agrgs) {Writer out = new OutputStreamWriter(System.out);new Generate("book.ftl", out) {public Object setData() {Map m = new HashMap();try {m.put("doc", freemarker.ext.dom.NodeModel.parse(new File("D:\\My Documents\\GitHub\\dwz_money\\template\\data.xml")));} catch (Exception e) { e.printStackTrace();}return m;}}.make();System.out.println("\n\n生成完毕");}
}
package common.codegenerate;import java.io.File;
import java.io.IOException;
import java.io.Writer;import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;public abstract class Generate {String ftlname;Writer out;public Generate(String ftlname, Writer out) {this.ftlname = ftlname;this.out = out;}abstract Object setData();public void make() {try {Configuration cfg = new Configuration();File f = new File("template");cfg.setDirectoryForTemplateLoading(f);cfg.setObjectWrapper(new DefaultObjectWrapper());Template temp = cfg.getTemplate(ftlname);Object data = setData(); temp.process(data, out);out.flush();} catch (IOException e) {e.printStackTrace();} catch (TemplateException e) {e.printStackTrace();}}
}

输出结果:

欢迎使用本书籍---------------
标题 《spring & struts2 & hibernate》
标题 《第一章》
细节: 1.1节
细节: 1.2节
----作者:周润发 创作地点:上海
标题 《第一章》
细节: 1.1节
细节: 1.2节
----作者:刘德华 创作时间:2013-1-1
标题 《第二章》
细节: 2.1节
细节: 2.2节
细节: 2.3节

说明:对于recurse指令,会从根对象“doc”(因为java代码中设置的根对象时doc)开始进行网下逐层级的解析xml,首先第一层是“book”,第二层是“title”,“chapter”,第三层是“para”,“title”.

访问了一层的话,要访问后面的层次的话,必须再继续嵌套使用<#recurse>。

访问xml节点的属性,使用.@属性名。判断属性是否存在,使用方式见ftl中。

转载必须注明文章来源:renjie120.iteye.com

freemarker的recurse示例代码相关推荐

  1. tf.squeeze示例代码

    官网上对此方法有介绍,但缺少验证示例,而百度上搜到的都是从官网上翻译过来的,正确倒都是正确的,只是缺少验证示例,这边写一个示例代码,希望能帮助理解 import tensorflow as tfk = ...

  2. ASP.NET 2.0 读取配置文件[INI](示例代码下载)

    (一). 功能 操作配置文件[*.ini]类 (二). 代码 1. 核心类文件 INIFILE.cs 代码  1 /// <summary>  2 /// INIFILE 操作类  3 / ...

  3. ASP.NET 2.0 HttpHandler实现生成图片验证码(示例代码下载)

    学习整理了一下 (一).功能 用HttpHandler实现图片验证码 (二).代码如下 1. 处理程序文件 ValidateImageHandler.ashx代码如下  1 <%@ WebHan ...

  4. python目标检测与识别_Python 使用Opencv实现目标检测与识别的示例代码

    在上章节讲述到图像特征检测与匹配 ,本章节是讲述目标检测与识别.后者是在前者的基础上进一步完善. 在本章中,我们使用HOG算法,HOG和SIFT.SURF同属一种类型的描述符.功能代码如下: impo ...

  5. 云开发使用 got 的 get/post 传参请求示例代码

    使用 got 进行网络请求的步骤: 1.创建云函数,并在终端执行云函数 2.执行 npm 安装 got ,命令:cnpm install --save got 3.在云函数中使用 示例代码: // 云 ...

  6. Unity 简单示例代码和向导/Unity Aplication Block

    Unity 简单示例代码和向导 关于Unity 的说明和下载地址,请访问[微软控制反转和依赖注入容器Unity 1.0发布] http://forum.entlib.com/Default.aspx? ...

  7. 装饰器的定义、语法糖用法及示例代码

    1. 装饰器的定义 就是给已有函数增加额外功能的函数,它本质上就是一个闭包函数. 装饰器的功能特点: 不修改已有函数的源代码 不修改已有函数的调用方式 给已有函数增加额外的功能 2. 装饰器的示例代码 ...

  8. 闭包的介绍、构成条件、作用及示例代码

    1. 闭包的介绍 我们学过了函数,我们知道当函数调用完,函数内定义的变量都销毁了,但是我们有时候需要保存函数内的这个变量,每次在这个变量的基础上完成一些列的操作,比如: 每次在这个变量的基础上和其它数 ...

  9. python积分管理系统_python实现每天自动签到领积分的示例代码

    自动签到的python脚本源码 新建一个python文件,checkin.py,保存到电脑上某个位置,我这里保存到的是E:\pyproject\checkin.py # 引入3个包 from sele ...

  10. 简单介绍vue获取token实现token登录的示例代码

    最近新做了个vue项目,正好项目中有登录部分,本文就详细的介绍一下登录部分的实现,文中通过示例代码介绍的非常详细,感兴趣的小伙伴们可以参考一下 使用token做登录验证的思路大致如下: 1.在第一次登 ...

最新文章

  1. Java的引用类型(附图说明)
  2. 随机迷宫c语言实验报告,[原创]递归随机迷宫生成算法详解
  3. Django权限系统auth模块详解
  4. eclipse 统计代码量,统计代码行数
  5. wpf控件样式管理示意图
  6. 《Inside C#》笔记(一) .NET平台
  7. AE的破解安装+连接到Media Encoder+Premiere的安装
  8. 计算机组成原理-检错码、纠错码
  9. spring cloud系列eureka客服端搭建
  10. Python 数据科学入门教程:Pandas
  11. 服务器不能使用无线键盘,无线键盘突然没反应怎么回事_无线键盘没反应的解决方法...
  12. 全球及中国汽车自动驾驶用胶粘剂行业市场发展态势与需求前景预测报告2022-2028年
  13. Lab颜色空间及其应用
  14. 计算机网络三网,七律四首(手机、电视、计算机网络、三网融合)
  15. 在几何画板中如何制作圆柱的侧面展开动画_如何用几何画板做三棱柱的侧面展开动画...
  16. debian live-buid
  17. 在.NET中实现彩色光标/动画光标和自定义光标[转]
  18. 换位思考:当美团app人气榜的数据不是字典而是列表
  19. Android开发,你必须知道的四大天王。
  20. React(一)——快速入门

热门文章

  1. 数据库SQL优化大总结1之- 百万级数据库优化方案
  2. 如何卸载ultraedit_怎么卸载ultra-edit32我安装了u – 手机爱问
  3. photoshop ps2022软件下载
  4. C语言CGI编程入门(一)
  5. EEMD、EMD去噪原理
  6. 静态网站生成器(开源项目)
  7. Windows XP/2000/Vista/7/8/8.1/10系统 hosts文件位置及使用
  8. 微信小程序转支付宝小程序注意事项
  9. 微信小程序标签样式的优先级
  10. 云服务预先定义正确的云计算SLA要求