文档章节

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

晓叹星沉
 晓叹星沉
发布于 2016/08/05 16:05
字数 337
阅读 56
收藏 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("\"", "\\\"")+"\");");
			}
		}
	}

}

 

 

 

 

 

 

 

© 著作权归作者所有

共有 人打赏支持
晓叹星沉
粉丝 13
博文 24
码字总数 35647
作品 0
海淀
高级程序员
私信 提问
使用 Ruby 开发代码生成器

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

IBMdW
2012/07/21
1K
0
Morven/fount4j-generator

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

Morven
2016/12/24
0
0
折腾大半年,终于可以出锅啦!

自己一直比较推崇代码生成器来,所以把自己之前写的C/S架构的代码生成器改版整理了下搬到线上来,期间断断续续的折腾大半年终于可以出锅了,取名leastcode,欢迎大家拍砖。 leastcode后台采用...

suggest
2015/12/01
596
2
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

没有更多内容

加载失败,请刷新页面

加载更多

撬动世界的支点——《引爆点》读书笔记2900字优秀范文

撬动世界的支点——《引爆点》读书笔记2900字优秀范文: 作者:挽弓如月。因为加入火种协会的读书活动,最近我连续阅读了两本论述流行的大作,格拉德威尔的《引爆点》和乔纳伯杰的《疯传》。...

原创小博客
12分钟前
0
0
《配电网自动化技术》第一章

写了配电网的组成、历程、难点、存在问题、解决方案,还是蛮好的。尤其是各地建设的系统后续又无法实用化,以及多种终端反而增加了运维工作量等,都是目前切实存在的让大家不停吐槽的内容。

max佩恩
17分钟前
0
0

中国龙-扬科
35分钟前
2
0
使用vuex的state状态对象的5种方式

vuex是一个专门为vue.js设计的状态管理模式,并且也可以使用devtools进行调试。 下面给大家来贴一下我的vuex的结构 下面是store文件夹下的state.js和index.js内容 //state.jsconst state =...

peakedness丶
38分钟前
2
0
NetCore MVC Demo

地址:http://114.116.9.72:5411

whltian
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部