文档章节

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

晓叹星沉
 晓叹星沉
发布于 2016/08/05 16:05
字数 337
阅读 50
收藏 0
点赞 0
评论 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 ⋅ 0

Morven/fount4j-generator

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

Morven ⋅ 2016/12/24 ⋅ 0

python高级:列表解析和生成表达式

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

sinat_23880167 ⋅ 2017/12/26 ⋅ 0

mybatis-plus 2.1.1 新增 mybatis 多租户 SQL 解析功能

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

青苗 ⋅ 2017/09/12 ⋅ 12

C/C++ 代码文档生成器--cldoc

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

匿名 ⋅ 2013/02/14 ⋅ 0

JAXX 2.4 发布,XML用户界面框架

JAXX是一个开源的XML用户界面框架。JAXX通过XML文 件来描述组件和它们的相互作用,然后把这些XML文件编译到普通的Java classes中。开发用户界面组件用JAXX将比用平常Java代码更快速而且更容易...

红薯 ⋅ 2011/02/21 ⋅ 3

20个代码生成框架 (.NET JAVA)

1.1 CodeSmith 一款人气很旺国外的基于模板的dotnet代码生成器 官方网站:http://www.codesmithtools.com 官方论坛:http://forum.codesmithtools.com/default.aspx 版权形式:30天试用 开...

唐僧他大叔 ⋅ 2017/02/24 ⋅ 0

Thrift 代码解析/生成器--Scrooge Twitter

Scrooge 是一个 Thrift 代码解析/生成器,能够生成 Scala 和 Java 代码。这就意味着,它能够取代 Apache Thrift 代码生成器,并能在 libthrift 上生成符合标准的可兼容的二进制编解码。 建议...

大胖森 ⋅ 2015/05/18 ⋅ 0

MyBatis 代码生成器--Mybatis-Generator

mybatis.generator 解决问题 mybatis.generator 后续简称 dalgen,解决mybatis代码自动生成的缺失. 对比其他代码生成工具 mybatis-generator-maven-plugin mybatis比较官方的代码生成器,生成...

匆匆里 ⋅ 2017/09/13 ⋅ 1

C++的XML操作库--XSD/e

CodeSynthesis XSD/e 是一个支持验证的主要用于移动平台和嵌入式平台的 XML 解析器和生成器,提供事件驱动、面向流的XML解析和生成以及XML Schema 验证,提供了数据绑定和操作功能。...

匿名 ⋅ 2011/02/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 31分钟前 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

eclipse酷炫大法之设置主题、皮肤

eclipse酷炫大法 目前两款不错的eclipse 1.系统设置 Window->Preferences->General->Appearance 2.Eclipse Marketplace下载【推荐】 Help->Eclipse Marketplace->搜索‘theme’进行安装 比如......

anlve ⋅ 昨天 ⋅ 0

vim编辑模式、vim命令模式、vim实践

vim编辑模式 编辑模式用来输入或修改文本内容,编辑模式除了Esc外其他键几乎都是输入 如何进入编辑模式 一般模式输入以下按键,均可进入编辑模式,左下角提示 insert(中文为插入) 字样 i ...

蛋黄Yolks ⋅ 昨天 ⋅ 0

大数据入门基础:SSH介绍

什么是ssh 简单说,SSH是一种网络协议,用于计算机之间的加密登录。 如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码...

董黎明 ⋅ 昨天 ⋅ 0

web3j教程

web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 汇智网最新发布的web3j教程,详细讲解...

汇智网教程 ⋅ 昨天 ⋅ 0

谷歌:安全问题机制并不如你想象中安全

腾讯科技讯 5月25日,如今的你或许已经对许多网站所使用的“安全问题机制”习以为常了,但你真的认为包括“你第一个宠物的名字是什么?”这些问题能够保障你的帐户安全吗? 根据谷歌(微博)安...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部