转载必须注明文章来源:renjie120.iteye.com
关于freemarker的recurse的用途,在百度和中文指南中,有很多的说明,都是千篇一律。
找了半天却没有找到关于如何具体对一个xml进行遍历解析的例子。
这里给出一个示例的例子:
xml文件:
<book> <title>spring & struts2 & 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
相关推荐
spring与freemarker整合 示例源码
SpringBoot中整合freemarker示例代码
本篇文章主要介绍了Spring Boot使用模板freemarker的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
spring与freemarker整合 示例源码S
4、资源概要:先阅读README.md文档,然后根据文档中的资源示例运行代码,有postman和内部调用两种方式; 5、项目目录other/下面有示例文件可快速入手; 适合人群:需要通过法务提供的word类型的合同模板,填充数据生成...
Spring + SpringMVC + Mybatis + FreeMarker 整合示例。所用jar包均是目前位置最新版本:201710最新版: spring mvc4.3.12 , mybatis: 3.4.5 , FreeMarker : 2.3.26。 有mysql数据库脚本。导入即可使用。有个简单的...
代码生成器支持model、Mapper、Dao、Service、ServiceImpl、Controller 一次性的生成,支持同时生成多张表,此代码生成器依赖JAR包比较少,除了必用Freemarker 和JDBC之外基本上完全个人编写
freemarker实现代码生成器详细教程
NULL 博文链接:https://jayluns.iteye.com/blog/1513885
Spring3MVC以Freemarker作展示层简单示例
freemarker简单示例,实现对文档内容的修改, 代码里面体现出什么传值,怎么实现
基于Freemarker模板的纯Java代码实现的代码生成器工具
freemarker 简单项目示例,生成静态html过程
freemarker自学代码
FreeMarker API源代码,很不错的学习资料
Freemaker是一个强大的模板引擎,相比velocity而言,其强大的过程调用、递归和闭包回调功能让freemaker可以完成几乎所有我们所想的功能。从个人看法而言,freemaker完全有能力作为MDA的代码辅助生成工具。 <br>
springmvc+mybatis 和一个简单的freemarker代码生成工具
freemarker 源代码包freemarker 源代码包freemarker 源代码包freemarker 源代码包freemarker 源代码包
JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-2.3.8JavaEE源代码 freemarker-...