当前位置: 首页 > news >正文

Java 基础三:使用Velocity模板生成 xml

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

现在我们就来看这个小例子:

1. 建立一个Velocity模板,以vm结尾,例子中模板文件为TaxReportXml.vm,内容如下:

<?xml version="1.0" encoding="utf-8"?>
<html>  
    <head></head>  
    <body>  
        HELLO! $name,Welcome to velocity!  
    </body>  
</html> 

$name 为需要程序传入的参数。

2. 以下为 velocityTest的代码:

package velocity;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.text.MessageFormat;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.joda.time.DateTime;

public class VelocityTest {

/**
 * @param args
 */
public static void main(String[] args) {
//得到VelocityEngine
VelocityEngine ve = new VelocityEngine();
//得到模板文件
        Template template = ve.getTemplate("/src/velocity/TaxReportXml.vm", "UTF-8");
        VelocityContext context = new VelocityContext();
        //传入参数
        context.put("name", "jacky");
        try {
        //生成xml
FileWriter fileWriter = getFileWriter("velocity_test.xml");
//调用merge方法传入context
        template.merge(context, fileWriter);
        fileWriter.flush();
        fileWriter.close();
} catch (IOException e) {
e.printStackTrace();
}   
}

    private static FileWriter getFileWriter(String fileName) throws IOException {
        String fullPath = MessageFormat.format("{1}{0}{2}",
                File.separator,
                "d://",
                fileName);
        System.out.println("fileName = " + fullPath);
        File outputFile = new File(fullPath);
        return new FileWriter(outputFile);
    }

}


看一下运行结果,在d:下的velocity_test.xml中:

<?xml version="1.0" encoding="utf-8"?>
<html>  
    <head></head>  
    <body>  
        HELLO! jacky,Welcome to velocity!  
    </body>  
</html> 

参数已经传到xml里了,很简单吧
 

相关文章:

  • 《华为数据之道》总结(上篇)
  • 【牛客 - 剑指offer / 快速幂】JZ16 数值的整数次方 两种方案(直接运算、快速幂) Java实现
  • SAP云集成 SAP Integration Suite启用过程,踩坑记
  • 【图像压缩】基于余弦变换及霍夫曼编码实现jpeg压缩和解压附matlab代码
  • MySQL开发技巧——行列转换
  • leetcode-剑指 Offer II 001. 整数除法
  • gitpod,不用clone代码就可以让项目在线上跑起来
  • 用Python制作我的核酸检测日历
  • Windows超级管理器
  • Flask 学习-34.restful-full 请求参数自定义参数校验类型 (reqparse.RequestParser() )
  • Flask 学习-36.Flask-RESTful 序列化输出对象
  • Flask 学习-37.Flask-RESTful 序列化输出fields 字段设置
  • 跨领域个性化迁移用户兴趣偏好
  • 【目标跟踪-卡尔曼滤波】基于扩展卡尔曼滤波实现目标跟踪定位附Matlab源码
  • P1510 精卫填海-01背包
  • 【译】JS基础算法脚本:字符串结尾
  • ECMAScript6(0):ES6简明参考手册
  • GitUp, 你不可错过的秀外慧中的git工具
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • markdown编辑器简评
  • Tornado学习笔记(1)
  • 机器学习 vs. 深度学习
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 计算机常识 - 收藏集 - 掘金
  • 力扣(LeetCode)56
  • 模型微调
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • 最近的计划
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​力扣解法汇总946-验证栈序列
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (1)常见O(n^2)排序算法解析
  • (145)光线追踪距离场柔和阴影
  • (二十四)Flask之flask-session组件
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (一)为什么要选择C++
  • (转)编辑寄语:因为爱心,所以美丽
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET 中 GetProcess 相关方法的性能
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @JSONField或@JsonProperty注解使用
  • @RequestMapping处理请求异常
  • @zabbix数据库历史与趋势数据占用优化(mysql存储查询)
  • @开发者,一文搞懂什么是 C# 计时器!
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429