`
enjiex
  • 浏览: 67917 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Velocity Template的另类用法:生成XML

阅读更多
前一段有应用中有个场景,是远程调用时,需要给对方传入xml格式的数据。一般生成xml的话,或者使用DOM4J等操作xml的第三方软件包,一个节点一个节点的生成xml格式数据;亦或者高级一些,使用反射,动态生成节点及数据。
上面第一种方式因为在程序中手动控制节点,所以可以生成较为复杂的结构;但也存在相应的问题,及数据与格式绑定太死,若需要生成多个xml数据,则可能会重复很种实现。上述的第二种方式刚好解决了上面说的重复实现的缺点,但最好的使用场景是xml中数据的数据结构刚好和对象、属性及其嵌套对象之间一致的话,实现起来较为方便。当然这并不是说不能用来生成较复杂的xml格式,但可能要做较多的工作。
除了上面说的,这里还有一种应该是比较非主流的实现方式吧,即使用Velocity中Template来做。之前只以为是Template是返回给页面的,那天经同事指点,竟然还有如此妙用。这里也仅仅依赖velocity的包,所以也不算太麻烦。费话不多说了,先看示例吧。
首先创建项目及添加依赖,pom文件如下:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.nuc.template2xml</groupId>
	<artifactId>template2xml</artifactId>
	<version>1.0-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>template2xml</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.velocity</groupId>
			<artifactId>velocity</artifactId>
			<version>1.6.3</version>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

我们除了用maven创建项目时会自动依赖的junit,我们仅仅添加了对velocity的依赖。
在使用的时候,也并不复杂,只需要对Velocity进行初始化,创建VelocityContext,获得模板文件位置,差不多就可以了,如下:
 public static void main( String[] args )
    {
    	try {
    		UserInfo userInfo = buildUserInfo();
    		
			Properties p = new Properties();
			p.put("file.resource.loader.class","org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
			
			Velocity.init(p);
			Template template = Velocity.getTemplate("vm/userInfo.vm");
			Context context = new VelocityContext();
			context.put("request", userInfo);
			StringWriter sw = new StringWriter();
			template.merge(context, sw);
			System.out.println(sw.toString());
			
		} catch (Exception e) {
			e.printStackTrace();
		}
    }   


下面是模板文件
<?xml version="1.0" encoding="UTF-8"?>
<PACKET TYPE="REQUEST">
    <HEAD>
    	<VERSION>R1</VERSION>
    </HEAD>
    <BODY>
    	<BASE>
    		<USERNAME>$!request.name</USERNAME>
			<AGE>$!request.age</AGE>
			<SEX>$!request.sex</SEX>
    	</BASE>
    	<DETAILS>
    		<PAYINFO>
    			<ACCOUNTID>$!request.account.id</ACCOUNTID>
				<MONEY>$!request.account.money</MONEY>
    		</PAYINFO>
    	</DETAILS>
    </BODY>
</PACKET>

模板文件也就是一个普通的xml文件,不同的是使用了Velocity的标签“$!”。
通过上面简单的步骤,步能生成我们需要的xml格式的字符串了。详细过程见附件。

这种方式生成xml格式字符串也不是万能的,因为必须自定义xml模板文件。不过在一些场景中倒也不失为一种选择。
分享到:
评论

相关推荐

    SpringBoot Velocity 代码生成模板

    4. 使用Velocity模板引擎,将解析出的信息填入模板,生成Java源码。 5. 编译生成的Java文件,添加到Spring Boot项目中。 在`demo`这个文件中,可能包含了上述步骤的示例代码或者配置文件。通过学习和理解这个示例,...

    java 通过模板生成 xml,发送报文

    2. **添加元素和属性**:使用`createElement`方法创建XML元素,`appendChild`方法将元素添加到文档中,`setAttribute`方法设置元素的属性。 ```java Element root = doc.createElement("root"); // 创建根元素 doc....

    velocity-engine-core-2.3-API文档-中英对照版.zip

    使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。

    velocity-template-tester:用于测试Apache Velocity模板的UIAPI

    速度模板测试器用于测试模板的UI / APIAPI参考参阅swagger 或swagger 关键参数: 端点: https://velocity-template-tester.herokuapp.com/api/expandTemplate : ...请求内容类型: application/json , application/x-...

    mybatis自动生成mapper.xml文件

    1. 使用MyBatis Generator(MBG):MBG是一个代码生成工具,可以自动根据数据库表结构生成Mapper.xml、DAO接口和Model实体类。首先,需要在pom.xml或build.gradle文件中添加MBG的依赖,并配置相关的插件。在MBG的...

    Velocity资料

    文件中提到了一些中文资料,如《VelocityJava开发指南中文版》、《Velocity模板使用指南中文版》等,这表明Velocity社区提供了相当完善的中文资料,有助于Java开发者更快速地学习和掌握Velocity的使用方法。...

    java 通过模板生成 xml

    总的来说,Java通过XML模板生成XML文件的方法多样,可以根据项目需求选择合适的技术。DOM适合小规模、简单的XML生成,JAXB适合Java对象到XML的映射,而模板引擎则提供了更大的灵活性和可读性。在实际应用中,结合...

    Velocity文档中文版

    Velocity 的能力远不止 web 站点开发这个领域,例如,它可以从模板(template)产生 SQL 和 PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。 Velocity 的主要...

    Velocity的基本用法

    1. **模板(Template)**: 模板是Velocity的基石,它定义了HTML、XML或其他格式的静态文本结构,其中包含了一些特殊的指令(称为Velocity语句)来插入动态数据。 2. **上下文(Context)**: 上下文是模板和Java代码...

    velocity_generator:代码生成器

    1. **模板驱动**:`Velocity_generator` 使用 `Velocity` 模板文件来定义生成代码的结构和内容。开发者可以根据项目需求创建或修改模板,模板中可以包含变量、条件语句、循环等,使得生成的代码具有很高的可定制性。...

    基于Velocity的代码生成器

    `velocity-1.6.4.jar`是Velocity库的JAR文件,包含了 Velocity 的所有类和方法,如`VelocityContext`(用于存储和传递数据到模板)、`Template`(表示一个模板对象)以及`VelocityEngine`(负责解析模板和合并数据)...

    velocity 入门文档及应用源码,很适合做自动代码生成

    手册中会详细介绍Velocity上下文(Context)、模板(Templates)、模板语言(Template Language)等核心概念,还有Velocity Engine的配置、宏库(Macro Library)的使用,以及与其他Java库如Spring的集成等高级主题。...

    Struts 与 Velocity 的集成(http://www-128.ibm.com/deve)

    Struts是一个MVC(Model-View-Controller)架构的实现,主要用于处理用户请求和业务逻辑,而Velocity则是一个模板引擎,专注于视图层的呈现,使得开发者可以将HTML、XML等格式的页面与Java代码分离,提高可读性和...

    itext加载velocity生成PDF

    `iText`是一个流行的Java库,专门用于创建和处理PDF文档,而`Velocity`则是一个强大的模板引擎,常用于动态生成HTML、XML等文本。将两者结合,我们可以利用`Velocity`的模板能力来动态生成PDF内容,这在SpringMVC...

    Velocity代码生成工具

    - **基本概念**:VTL是Velocity模板引擎使用的脚本语言,它提供了一系列内置对象、变量和指令来帮助生成动态内容。 - **变量**:用于存储数据值。 - **属性**:可以是字符串、数字或任何其他类型的数据。 - **方法**...

    使用Velocity Swing制作的代码生成工具

    【标题】"使用Velocity Swing制作的代码生成工具"是一个基于Java Swing UI框架和Velocity模板引擎开发的代码自动化生成工具。这个工具旨在帮助开发者快速生成符合特定模式的代码,减轻重复劳动,提高开发效率。 ...

    springmvc+velocity+ Rest Services(xml,json)实例

    **Spring MVC + Velocity + REST Services (XML, JSON) 实例详解** 在当今的Web开发领域,Spring MVC、Velocity和RESTful服务是常见的技术栈。这个实例项目是一个基于Maven构建的无数据库操作的轻量级Web应用,它...

    velocity的中文指南

    Velocity Template Language (VTL)是Velocity的脚本语言,用于在Web页面中嵌入动态内容。VTL使用引用来将动态内容嵌入Web页面,每个变量就是某一个类型的引用。变量实际上是一个可以调用定义在Java代码中的内容的...

Global site tag (gtag.js) - Google Analytics