最近遇到一个项目,要通过接口对外传输数据,采用xml格式传送,一看文档40多个接口啊,瞬间感觉生活没希望了。如果要一点点拼接成字符串,是非常耗时的,当然,肯定也很烦躁。如果通过XStream将JavaBean序列化成xml,还要为每个接口定义一个JavaBean,也很麻烦。于是考虑是不是能写个程序能自己解析xml节点,然后直接拼接成代码,这样就只关注赋值就可以了。代码没什么技术含量,就一个正则,一个文件I/O。
测试xml:
123456
结果:
StringBuffer sb = new StringBuffer();sb.append(" ");sb.append("");sb.append(" ");").append("").append(" ");sb.append("").append("").append(" ");sb.append("
源码如下:
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(\" \");"); }else if(matcher1.matches()){ String b = res.substring(res.indexOf("<") + 1, res.indexOf("/>")); System.out.println("sb.append(\"<"+b+">\").append(\"\").append(\" \");"); }else{ System.out.println("sb.append(\""+res.replace("\"", "\\\"")+"\");"); } } }}