前一段有应用中有个场景,是远程调用时,需要给对方传入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模板文件。不过在一些场景中倒也不失为一种选择。
分享到:
相关推荐
4. 使用Velocity模板引擎,将解析出的信息填入模板,生成Java源码。 5. 编译生成的Java文件,添加到Spring Boot项目中。 在`demo`这个文件中,可能包含了上述步骤的示例代码或者配置文件。通过学习和理解这个示例,...
2. **添加元素和属性**:使用`createElement`方法创建XML元素,`appendChild`方法将元素添加到文档中,`setAttribute`方法设置元素的属性。 ```java Element root = doc.createElement("root"); // 创建根元素 doc....
使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。
速度模板测试器用于测试模板的UI / APIAPI参考参阅swagger 或swagger 关键参数: 端点: https://velocity-template-tester.herokuapp.com/api/expandTemplate : ...请求内容类型: application/json , application/x-...
1. 使用MyBatis Generator(MBG):MBG是一个代码生成工具,可以自动根据数据库表结构生成Mapper.xml、DAO接口和Model实体类。首先,需要在pom.xml或build.gradle文件中添加MBG的依赖,并配置相关的插件。在MBG的...
文件中提到了一些中文资料,如《VelocityJava开发指南中文版》、《Velocity模板使用指南中文版》等,这表明Velocity社区提供了相当完善的中文资料,有助于Java开发者更快速地学习和掌握Velocity的使用方法。...
总的来说,Java通过XML模板生成XML文件的方法多样,可以根据项目需求选择合适的技术。DOM适合小规模、简单的XML生成,JAXB适合Java对象到XML的映射,而模板引擎则提供了更大的灵活性和可读性。在实际应用中,结合...
Velocity 的能力远不止 web 站点开发这个领域,例如,它可以从模板(template)产生 SQL 和 PostScript、XML,它也可以被当作一个独立工具来产生源代码和报告,或者作为其他系统的集成组件使用。 Velocity 的主要...
1. **模板(Template)**: 模板是Velocity的基石,它定义了HTML、XML或其他格式的静态文本结构,其中包含了一些特殊的指令(称为Velocity语句)来插入动态数据。 2. **上下文(Context)**: 上下文是模板和Java代码...
1. **模板驱动**:`Velocity_generator` 使用 `Velocity` 模板文件来定义生成代码的结构和内容。开发者可以根据项目需求创建或修改模板,模板中可以包含变量、条件语句、循环等,使得生成的代码具有很高的可定制性。...
`velocity-1.6.4.jar`是Velocity库的JAR文件,包含了 Velocity 的所有类和方法,如`VelocityContext`(用于存储和传递数据到模板)、`Template`(表示一个模板对象)以及`VelocityEngine`(负责解析模板和合并数据)...
手册中会详细介绍Velocity上下文(Context)、模板(Templates)、模板语言(Template Language)等核心概念,还有Velocity Engine的配置、宏库(Macro Library)的使用,以及与其他Java库如Spring的集成等高级主题。...
Struts是一个MVC(Model-View-Controller)架构的实现,主要用于处理用户请求和业务逻辑,而Velocity则是一个模板引擎,专注于视图层的呈现,使得开发者可以将HTML、XML等格式的页面与Java代码分离,提高可读性和...
`iText`是一个流行的Java库,专门用于创建和处理PDF文档,而`Velocity`则是一个强大的模板引擎,常用于动态生成HTML、XML等文本。将两者结合,我们可以利用`Velocity`的模板能力来动态生成PDF内容,这在SpringMVC...
- **基本概念**:VTL是Velocity模板引擎使用的脚本语言,它提供了一系列内置对象、变量和指令来帮助生成动态内容。 - **变量**:用于存储数据值。 - **属性**:可以是字符串、数字或任何其他类型的数据。 - **方法**...
【标题】"使用Velocity Swing制作的代码生成工具"是一个基于Java Swing UI框架和Velocity模板引擎开发的代码自动化生成工具。这个工具旨在帮助开发者快速生成符合特定模式的代码,减轻重复劳动,提高开发效率。 ...
**Spring MVC + Velocity + REST Services (XML, JSON) 实例详解** 在当今的Web开发领域,Spring MVC、Velocity和RESTful服务是常见的技术栈。这个实例项目是一个基于Maven构建的无数据库操作的轻量级Web应用,它...
Velocity Template Language (VTL)是Velocity的脚本语言,用于在Web页面中嵌入动态内容。VTL使用引用来将动态内容嵌入Web页面,每个变量就是某一个类型的引用。变量实际上是一个可以调用定义在Java代码中的内容的...