文档章节

代码生成器----xml自解析生成StringBuffer

晓叹星沉
 晓叹星沉
发布于 2016/08/05 16:05
字数 337
阅读 52
收藏 0

        最近遇到一个项目,要通过接口对外传输数据,采用xml格式传送,一看文档40多个接口啊,瞬间感觉生活没希望了。如果要一点点拼接成字符串,是非常耗时的,当然,肯定也很烦躁。如果通过XStream将JavaBean序列化成xml,还要为每个接口定义一个JavaBean,也很麻烦。于是考虑是不是能写个程序能自己解析xml节点,然后直接拼接成代码,这样就只关注赋值就可以了。代码没什么技术含量,就一个正则,一个文件I/O。

测试xml:

<?xml version="1.0" encoding="GBK"?>
<transaction>
<test>123456</test>
<test1/>
</transaction>

结果:

StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"GBK\"?>");
sb.append("<transaction>");
sb.append("<test>").append("").append("</test>");
sb.append("<test1>").append("").append("</test1>");
sb.append("</transaction>");

源码如下:

package com.example;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/** 
 *
 * @since jdk1.6
 * @date 2016-8-5
 */
public class TestRun {

	/** 
	 * @param args  
	 * @throws IOException 
	 */

	public static void main(String[] args) throws IOException {
		File file = new File("F:/test.xml");
		FileInputStream fis = new FileInputStream(file);
		BufferedReader br = new BufferedReader(new InputStreamReader(fis));
		String line = "";
		Pattern pattern = Pattern.compile("<.[^<>?]*>[\\s|\\S]*</.[^<>?]*>");
		Pattern pattern1 = Pattern.compile("<.[^<>?]*/>");
		System.out.println("StringBuffer sb = new StringBuffer();");
		while ((line = br.readLine()) != null) {
			String res = line.trim();
			Matcher matcher = pattern.matcher(res);
			Matcher matcher1 = pattern1.matcher(res);
			if(matcher.matches()){
				String a = res.substring(res.indexOf("<") + 1, res.indexOf(">"));
				System.out.println("sb.append(\"<"+a+">\").append(\"\").append(\"</"+a+">\");");
			}else if(matcher1.matches()){
				String b = res.substring(res.indexOf("<") + 1, res.indexOf("/>"));
				System.out.println("sb.append(\"<"+b+">\").append(\"\").append(\"</"+b+">\");");
			}else{
				System.out.println("sb.append(\""+res.replace("\"", "\\\"")+"\");");
			}
		}
	}

}

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
晓叹星沉
粉丝 12
博文 22
码字总数 12552
作品 0
海淀
高级程序员
使用 Ruby 开发代码生成器

在软件开发工程中,源代码生成工具是提升生产效率的利器。在我的工作中,曾经使用过 XLST、FreeMaker 等多种技术开发源代码生成器,最终我还是选择了脚本语言 Ruby。Ruby 以其简洁有趣的语法...

IBMdW
2012/07/21
939
0
Morven/fount4j-generator

Fount4j Generator Fount4j Generator 是使用 Java 语言编写的,基于 Beetl 模板引擎的数据库反向工程项目。内置 MyBatis 的 Entity、Dao、Mapper 文件模板。 特点 生成的文件中增加了自定义...

Morven
2016/12/24
0
0
python高级:列表解析和生成表达式

一、语法糖的概念“糖”,可以理解为简单、简洁,“语法糖”使我们可以更加简洁、快速的实现这些功能。 只是Python解释器会把这些特定格式的语法翻译成原本那样复杂的代码逻辑 我们使用的语法...

sinat_23880167
2017/12/26
0
0
C/C++ 代码文档生成器--cldoc

cldoc 是一个使用 clang 实现的 C/C++ 代码文档生成器。 特点: 使用 clang 可靠解析大多数复杂的 C++ 项目 零配置 使用 markdown 做为文档格式 生成描述 API 的 XML 文档 使用简单格式用于文...

匿名
2013/02/14
1K
0
mybatis-plus 2.1.1 新增 mybatis 多租户 SQL 解析功能

mybatis-plus 是一款 mybatis 动态 SQL 自动注入 mybatis 增删改查 CURD 操作中间件。让 mybatis 拥有 hibernate 的单表高效,也保留 xml sql 的灵动。 代号: 真正身份是改变社会风气,风魔...

青苗
2017/09/12
1K
12

没有更多内容

加载失败,请刷新页面

加载更多

Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
34分钟前
1
0
fullcalendar重新渲染

uiCalendarConfig.calendars.lesson_calendar.fullCalendar('removeEvents');var ym = uiCalendarConfig.calendars.lesson_calendar.fullCalendar('getView').title;$scope.get_lesson(y......

人来疯啊
38分钟前
1
0
多渠道打包总结

https://www.jianshu.com/p/2130db7584c8 https://blog.csdn.net/u011153817/article/details/50772496...

塔塔米
47分钟前
1
0
android -------- Data Binding的使用 ( 六) 自定义属性

今天来说说DataBinding在自定义属性的使用 默认的android命名空间下,我们会发现并不是所有的属性都能直接通过data binding进行设置,比如margin,padding,还有自定义View的各种属性。 默认...

切切歆语
53分钟前
1
0
收邮件 下载附件

uses IdMessage, IdMessageParts, IdAttachment, IdGlobalProtocols, ...;procedure SaveAttachmentsFromFile(FileName: String)var IdMessage: TIdMessage; MsgPart: Ti......

vga
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部