`
accpzgp
  • 浏览: 13697 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

FreeMaker读取XML数据源

 
阅读更多

FreeMark2.3支持 XML;在程序中可直接把xml文件作为数据模型,按用户模板文件的要求,输出相应的文件(或流)给用户。

与前面相比,关键有:

引用
1 freemarker.ext.dom.NodeModel.parse这个方法将把xml文件处理成map树状结构的模型;该方法支持以File对象,读xml;也提供了一个流适配器,从面能用InsputStream流对象读xml文件。

2 Map root = new HashMap();
root.put("doc", freemarker.ext.dom.NodeModel.parse( ins));
这里要注意:经处理后:”doc”,在数据模型中是根;而xml文件的根是它的子节点;
在读数据时,要从doc开始,否则出错。当然,”doc”也可改成其他名字。

3 增加了一个recurse指令。
FreeMarker这样处理的xml结构的数据模型的:
(1) 按层定义宏;宏名---就是节点名。(这是强行约定的)
(2) recurse----将循环调用处理子节点的宏





下面是在java应用程序中,应用freemarker的示例:

(1) ddd.xml
注意ddd.xml位于classpath下的jap1文件夹下,与下面的 FMtest.java的位置相同。在netbean开发环境中,位于 src/java/jsp1下。[size=medium]

Xml代码
  1. <?xmlversion="1.0"encoding="UTF-8"?>
  2. <root>
  3. <user>
  4. <name>张三1111</name>
  5. </user>
  6. <user>
  7. <name>李四hhhh</name>
  8. </user>
  9. </root>




(2) FMTest.java -------应用freemarker的类

Java代码
  1. packagejap1;
  2. importfreemarker.template.Configuration;
  3. importfreemarker.template.Template;
  4. importfreemarker.template.TemplateException;
  5. importjava.io.IOException;
  6. importjava.io.InputStream;
  7. importjava.io.StringWriter;
  8. importjava.util.HashMap;
  9. importjava.util.Locale;
  10. importjava.util.Map;
  11. importjavax.xml.parsers.ParserConfigurationException;
  12. importorg.xml.sax.InputSource;
  13. importorg.xml.sax.SAXException;
  14. publicclassFMTest{
  15. publicstaticvoidmain(String[]args)throwsException{
  16. FMTesttest=newFMTest();
  17. test.getFile();
  18. }
  19. @SuppressWarnings("empty-statement")
  20. publicvoidgetFile()throwsIOException,TemplateException,
  21. SAXException,ParserConfigurationException{
  22. //得FreeMarker配置对象
  23. Configurationcfg=newConfiguration();
  24. cfg.setEncoding(Locale.getDefault(),"UTF-8");
  25. cfg.setClassForTemplateLoading(this.getClass(),"/jap1");
  26. //得FreeMarker的关键对象---------模板
  27. Templatetemp=cfg.getTemplate("test.ftl");
  28. //得FMTest类运行时/jap1/ddd.xml的输入流文件,以便FreeMarker读出来
  29. //注意:FMTest运行时,ddd.xml在工程打包的包中。Java强烈要求只能读包内
  30. //文件。如果要得到运行的绝对路径,再用可写的流打包,java会严重抗议!
  31. InputStreamin=FMTest.class.getResourceAsStream("/jap1/ddd.xml");
  32. //下面是FreeMarker的输入接口,这里与上面的in流建立关系,
  33. //以便读取ddd.xml文件
  34. InputSourceins=neworg.xml.sax.InputSource(in);
  35. Maproot=newHashMap();
  36. //特别注意此时的doc,这个符号将是,FreeMarker模板中取数的根!!!!!
  37. //这里读取xml文件,并处理成root对象
  38. root.put("doc",freemarker.ext.dom.NodeModel.parse(ins));
  39. //建立内存字符串流
  40. java.io.StringWriterw=newStringWriter();
  41. //模板开始按模板中的要求把用户输入的数据进行转换,并输出到字符串流中
  42. temp.process(root,w);
  43. //字符串流输出到屏幕
  44. System.out.println(w.toString());
  45. }
  46. }




(3) test.ftl --------模板文件

Xml代码
  1. 测试单个读数操作-----${doc.root.user[0].name}
  2. 列表测试:
  3. <#listdoc.root.userasdd>
  4. ${dd.name}
  5. </#list>
  6. <#--recurse指令,按层读取整个xml节点,并循环调用处理这些节点的宏-->
  7. <#recursedoc><#--root是doc的子节点,这里将循环调用<#marcoroot>宏-->
  8. 读doc
  9. <#macroroot>
  10. 读root<#recurse><#--user是root的子节点,这里将循环调用<#marcouser>宏-->
  11. </#macro>
  12. <#macrouser>
  13. 姓名:${.node.name};测试recurse指令,user
  14. </#macro>





(4) 运行结果

Java代码
  1. 测试单个读数操作-----张三1111
  2. 列表测试:
  3. 张三1111
  4. 李四hhhh
  5. 读root
  6. 姓名:张三1111;测试recurse指令,user
  7. 姓名:李四hhhh;测试recurse指令,user
  8. 读doc
分享到:
评论

相关推荐

    使用freemarker生成word文档,源代码+jar包+说明文档及注意事项

    也就是说,不要在word里首先打完 ${ } 之后,又从其它地方把 string 字符串粘贴至 { } 之间,这样在 word 转化为 xml时,解析会有问题,freemarker解析时,会报错。 /** * @Desc:生成word文件 * @Author:张轮...

    JAVA上百实例源码以及开源项目源代码

    Java从网络取得文件 1个目标文件 简单 Java从压缩包中提取文件 1个目标文件 简单 Java存储与读取对象 1个目标文件 如题 Java调色板面板源代码 1个目标文件 摘要:Java源码,窗体界面,调色板 使用Java语言编写的一款...

    JAVA上百实例源码以及开源项目

    Java读写文本文件的示例代码 1个目标文件。 java俄罗斯方块 一个目标文件。 Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密  Java非对称加密源程序代码实例,本例中使用RSA加密技术,...

    Spring-Reference_zh_CN(Spring中文参考手册)

    配置子报表数据源 14.7.5. 配置Exporter的参数 15. 集成其它Web框架 15.1. 简介 15.2. 通用配置 15.3. JavaServer Faces 15.3.1. DelegatingVariableResolver 15.3.2. FacesContextUtils 15.4. Struts 15.4.1. ...

    spring chm文档

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    深入浅出Struts2(附源码)

    作者处处从实战出发,在丰富的示例中直观地探讨了许多实用的技术,如数据类型转换、文件上传和下载、提高Struts 2应用的安全性、调试与性能分析、FreeMarker、Velocity、Ajax,等等。跟随作者一道深入Struts 2,聆听...

    Spring中文帮助文档

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    Spring API

    14.4. Velocity和FreeMarker 14.4.1. 需要的资源 14.4.2. Context 配置 14.4.3. 创建模板 14.4.4. 高级配置 14.4.5. 绑定支持和表单处理 14.5. XSLT 14.5.1. 写在段首 14.5.2. 小结 14.6. 文档视图(PDF/...

    Spring 2.0 开发参考手册

    目录 前言 1. 简介 1.1. 概览 1.2. 使用场景 2. Spring 2.0 的新特性 2.1. 简介 ... 源代码级的元数据类型 20.3.5. 接口AutodetectCapableMBeanInfoAssembler 20.3.6. 用Java接口定义管理接口 ...

    J2eeFAST企业级快速开发平台 v2.0.8

    支持多数据源;支持读写分离、分库分表。 J2eeFAST功能 1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。 2、部门管理:配置系统组织机构(公司、部门),树结构展现支持数据权限。 3、岗位管理:配置...

    J2eeFAST企业级快速开发平台-其他

    支持多数据源;支持读写分离、分库分表。J2eeFAST功能:1、用户管理:用户是系统操作者,该功能主要完成系统用户配置。2、部门管理:配置系统组织机构(公司、部门),树结构展现支持数据权限。3、岗位管理:配置...

    java开源包1

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包11

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包2

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包3

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包6

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包5

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包10

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

    java开源包4

    缓存读取自redis的slave节点,写入到redis的master节点。 Java对象的SQL接口 JoSQL JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java...

Global site tag (gtag.js) - Google Analytics