zoukankan      html  css  js  c++  java
  • xml格式转换为Bean

    /**
     * 
     */
    package com.hdrs.ris.law2.large.xml.utils;
    
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileReader;
    import java.io.FileWriter;
    import java.util.ArrayList;
    import java.util.List;
    /**
     * 该程序可以从xml中提出生成对应的beans,方便jaxb使用
     * 
     * 解析说明:
     * 1、如果使用"/>"做为结束,元素的开始和结束必须在一行.
     * 2、如果使用</元素>结束,元素的开始和结束标签不能在一行。
     * 3、如果某个元素为list,这元素中添加属性list(类型)用以标记,如<users list(user)>
     * 
     * @author liuwenbin
     */
    public class CreateBeansFromXml {
        private static List<String> createFileNames=new ArrayList<String>();
        private static List<String> error=new ArrayList<String>();
        private static String listNameString="";
        /**
         * 创建java beans的主方法
         * @param xmlFile xml文件的路径和文件名
         * @param outBeansPath 生成beans存放的路径
         */
        public static void createBeans(String xmlFile,String outBeansPath) throws Exception {
            File file=new File(xmlFile);
            BufferedReader bufferedReader=new BufferedReader(new FileReader(file));
            String line=bufferedReader.readLine();
            String makeFile="";
            String parent="";
            List<String> parents=new ArrayList<String>();
            boolean isHead=true;
            List<String> listElement=new ArrayList<String>();
            while(null!=line){
                if(line.contains("<?xml")){
                    line=bufferedReader.readLine();
                    continue;
                }
                makeFile="";
                line=line.trim();
                if(line.startsWith("<")){
                    if(line.contains("/>")){
                        if(line.contains(" ")){
                            makeFile=line.substring(line.indexOf("<")+1,line.indexOf(" "));
                            parent=parents.get(parents.size()-1);
                            fileWrite(outBeansPath+firstToUp(parent), writeElement(makeFile));
                            //生成java文件
                            if(createFileNames.contains(outBeansPath+firstToUp(makeFile))){
                                error.add(makeFile);
                            }
                            createFileNames.add(outBeansPath+firstToUp(makeFile));
                            fileWrite(outBeansPath+firstToUp(makeFile), makeJavaHead(false,isHead,makeFile));
                            String[] contents=line.substring(line.indexOf(" ")+1,line.indexOf("/>")).split(" ");
                            for (String string : contents) {
                                if(string.contains("=")){
                                    fileWrite(outBeansPath+firstToUp(makeFile), writeAttribute(string.split("=")[0]));
                                }
                            }
                        }else{
                            makeFile=line.substring(line.indexOf("<")+1,line.indexOf("/>"));
                        }
                    }else if(line.contains("</")){
                        makeFile=line.substring(line.indexOf("</")+2,line.lastIndexOf(">"));
                        if(line.contains("<"+makeFile+">")){
                            parent=parents.get(parents.size()-1);
                            if(!listNameString.contains("list("+makeFile)){
                                fileWrite(outBeansPath+firstToUp(parent), writeElementString(makeFile));
                            }
                        }else{
                            parents.remove(makeFile);
                        }
                    }else{
                        line=line.substring(line.indexOf("<")+1,line.indexOf(">"));
                        if(line.contains(" ")){
                            makeFile=line.substring(0,line.indexOf(" "));
                        }else{
                            makeFile=line;
                        }
                        if(!isHead){
                            parent=parents.get(parents.size()-1);
                            if(!listElement.contains(makeFile)){
                                fileWrite(outBeansPath+firstToUp(parent), writeElement(makeFile));
                            }
                        }
                        parents.add(makeFile);
                        if(createFileNames.contains(outBeansPath+firstToUp(makeFile))){
                            error.add(makeFile);
                        }
                        createFileNames.add(outBeansPath+firstToUp(makeFile));
                        if(line.contains("list(")){
                            fileWrite(outBeansPath+firstToUp(makeFile), makeJavaHead(true,isHead,makeFile));
                        }else{
                            fileWrite(outBeansPath+firstToUp(makeFile), makeJavaHead(false,isHead,makeFile));
                        }
                        isHead=false;
                        if(line.contains(" ")){
                            String attrs[] =line.substring(line.indexOf(" ")+1).split(" ");
                            for (String attr : attrs) {
                                if(attr.contains("=")){
                                    attr=attr.split("=")[0];
                                    if(attr.startsWith("list(")){
                                        listNameString=attr+"||";
                                        attr=attr.substring(attr.indexOf("list(")+5,attr.indexOf(")"));
                                        listElement.add(attr);
                                        fileWrite(outBeansPath+firstToUp(makeFile), writeElementList(attr));
                                    }else{
                                        fileWrite(outBeansPath+firstToUp(makeFile), writeAttribute(attr));
                                    }
                                }else if (attr.startsWith("list(")) {
                                    listNameString=attr+"||";
                                    attr=attr.substring(attr.indexOf("list(")+5,attr.indexOf(")"));
                                    listElement.add(attr);
                                    fileWrite(outBeansPath+firstToUp(makeFile), writeElementList(attr));
                                }
                            }
                        }
                    }
                }
                line=bufferedReader.readLine();
            }
            bufferedReader.close();
            //为生成的文件添加getter和setter方法
            File fileDir=new File(outBeansPath);
            File[] files=fileDir.listFiles();
            BufferedReader bufferedReader2=null;
            String[] contSplit=null;
            for (File file2 : files) {
                if(file2.getName().contains(".svn")){
                    continue;
                }
                bufferedReader2=new BufferedReader(new FileReader(file2));
                line=bufferedReader2.readLine();
                while(null!=line){
                    if(line.contains("private")){
                        contSplit=line.split(" ");
                        writeGetterAndSetterToFile(file2.getAbsolutePath(), writeGetterAndSetter(contSplit[2].substring(0,contSplit[2].length()-1), contSplit[1]));
                    }
                    line=bufferedReader2.readLine();
                }
                writeGetterAndSetterToFile(file2.getAbsolutePath(), "}");
            }
            bufferedReader2.close();
            System.out.println("======================全部结束=====================");
            System.out.println("一共创建"+createFileNames.size()+"个文件:");
            for (String string : createFileNames) {
                System.out.println(string+".java");
            }
            System.out.println("---------------------------------------------------");
            if(error.size()!=0){
                System.out.println("产生错误:");
                for (String string : error) {
                    System.out.println(string+"重复,可能为list,其父节点应该加上"list("+string+")"标识,并删除重复段");
                }
            }
        }
        /**
         * 写文件
         * @param fileName 文件名
         * @param content 内容
         * @throws Exception
         */
        private static void fileWrite(String fileName,String content) throws Exception{
            File file=new File(fileName+".java");
            if(!file.exists()){
                file.createNewFile();
            }
            BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file,true));
            bufferedWriter.write(content);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        /**
         * 将get和set方法写到文件中
         * @param fileName
         * @param content
         * @throws Exception
         */
        private static void writeGetterAndSetterToFile(String fileName,String content) throws Exception{
            File file=new File(fileName);
            if(!file.exists()){
                file.createNewFile();
            }
            BufferedWriter bufferedWriter=new BufferedWriter(new FileWriter(file,true));
            bufferedWriter.write(content);
            bufferedWriter.flush();
            bufferedWriter.close();
        }
        /**
         * 生成java beans文件头
         * @param importList 是否是list
         * @param isHead 是否是头部
         * @param Element 元素名称
         * @return
         */
        private static String makeJavaHead(boolean importList,boolean isHead,String Element){
            StringBuffer buffer=new StringBuffer();
            buffer.append("package com.hdrs.ris.law2.large.xml.add;
    
    ");
            buffer.append("import com.thoughtworks.xstream.annotations.XStreamAlias;
    ");
            if(importList){
                buffer.append("import java.util.List;
    ");
            }
            if(isHead){
                buffer.append("@XStreamAlias("");
                buffer.append(Element);
                buffer.append("")
    ");
            }
            buffer.append("public class ");
            buffer.append(firstToUp(Element));
            buffer.append(" {
    ");
            return buffer.toString();
        }
        /**
         * 写元素(字符串)
         * @param Element 元素
         * @return
         */
        private static String writeElementString(String Element){
            StringBuffer buffer=new StringBuffer();
            buffer.append("	@XStreamAlias("");
            buffer.append(Element);
            buffer.append("")
    ");
            buffer.append("	private ");
            buffer.append("String");
            buffer.append(" ");
            buffer.append(Element);
            buffer.append(";
    
    ");
            return buffer.toString();
        }
        /**
         * 写元素(对象)
         * @param Element 元素
         * @return
         */
        private static String writeElement(String Element){
            StringBuffer buffer=new StringBuffer();
            buffer.append("	@XStreamAlias("");
            buffer.append(Element);
            buffer.append("")
    ");
            buffer.append("	private ");
            buffer.append(firstToUp(Element));
            buffer.append(" ");
            buffer.append(Element);
            buffer.append(";
    
    ");
            return buffer.toString();
        }
        /**
         * 写元素(list)
         * @param Element 元素
         * @return
         */
        private static String writeElementList(String Element){
            StringBuffer buffer=new StringBuffer();
            buffer.append("	@XStreamAlias("");
            buffer.append(Element);
            buffer.append("")
    ");
            buffer.append("	private List<");
            buffer.append(firstToUp(Element));
            buffer.append("> ");
            buffer.append(Element);
            buffer.append("s;
    
    ");//如果是list加”S“
            return buffer.toString();
        }
        /**
         * 写属性
         * @param attr 属性名称
         * @return
         */
        private static String writeAttribute(String attr){
            StringBuffer buffer=new StringBuffer();
            buffer.append("	@XStreamAsAttribute");
            buffer.append("
    ");
            buffer.append("	private ");
            buffer.append("String");
            buffer.append(" ");
            buffer.append(attr);
            buffer.append(";
    
    ");
            return buffer.toString();
        }
        public static String writeGetterAndSetter(String param,String type){
            //Getter
            StringBuffer buffer=new StringBuffer();
            buffer.append("
    	public ");
            buffer.append(type);
            buffer.append(" get");
            buffer.append(firstToUp(param));
            buffer.append("() {
    ");
            buffer.append("		return ");
            buffer.append(param);
            buffer.append(";
    ");
            buffer.append("	}
    ");
            //Setter
            buffer.append("	public void ");
            buffer.append("set");
            buffer.append(firstToUp(param));
            buffer.append("(");
            buffer.append(type);
            buffer.append(" ");
            buffer.append(param);
            buffer.append(") {
    ");
            buffer.append("		this.");
            buffer.append(param);
            buffer.append(" = ");
            buffer.append(param);
            buffer.append(";
    ");
            buffer.append("	}
    ");
            return buffer.toString();
        }
        /**
         * 首字母大写
         * @param word 单词
         * @return
         */
        private static String firstToUp(String word){
            return word.replaceFirst(word.substring(0, 1), word.substring(0, 1).toUpperCase());
        }
    }
    

      -------------

    将Bean转化为XML,使用XStream

  • 相关阅读:
    操作系统概述
    18 文本处理
    17 正则表达式(重点)
    16 归档和备份
    15 查找文件
    博客园图片折叠
    EF6学习笔记十五:调试EF框架源码
    EF6学习笔记十四:上下文管理
    Sqlserver和LocalDB创建数据库时默认字符集不一样
    EF6学习笔记十三:基础知识完结,零碎问题补缺
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7491517.html
Copyright © 2011-2022 走看看