代码语言
.
CSharp
.
JS
Java
Asp.Net
C
MSSQL
PHP
Css
PLSQL
Python
Shell
EBS
ASP
Perl
ObjC
VB.Net
VBS
MYSQL
GO
Delphi
AS
DB2
Domino
Rails
ActionScript
Scala
代码分类
文件
系统
字符串
数据库
网络相关
图形/GUI
多媒体
算法
游戏
Jquery
Extjs
Android
HTML5
菜单
网页交互
WinForm
控件
企业应用
安全与加密
脚本/批处理
开放平台
其它
【
Java
】
从XML文件中生成对应的bean
作者:
liuwbCoder
/ 发布于
2014/9/10
/
389
package com.log.makehavafromxml; 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.bean;\r\n\r\n"); buffer.append("import javax.xml.bind.annotation.XmlAccessType;\r\n"); buffer.append("import javax.xml.bind.annotation.XmlAccessorType;\r\n"); buffer.append("import javax.xml.bind.annotation.XmlAttribute;\r\n"); buffer.append("import javax.xml.bind.annotation.XmlElement;\r\n"); if(importList){ buffer.append("import java.util.List;\r\n"); } if(isHead){ buffer.append("import javax.xml.bind.annotation.XmlRootElement;\r\n"); buffer.append("@XmlRootElement(name=\""); buffer.append(Element); buffer.append("\")\r\n"); } buffer.append("@XmlAccessorType(XmlAccessType.FIELD)\r\n"); buffer.append("public class "); buffer.append(firstToUp(Element)); buffer.append(" {\r\n"); return buffer.toString(); } /** * 写元素(字符串) * @param Element 元素 * @return */ private static String writeElementString(String Element){ StringBuffer buffer=new StringBuffer(); buffer.append("\t@XmlElement(name=\""); buffer.append(Element); buffer.append("\")\r\n"); buffer.append("\tprivate "); buffer.append("String"); buffer.append(" "); buffer.append(Element); buffer.append(";\r\n\r\n"); return buffer.toString(); } /** * 写元素(对象) * @param Element 元素 * @return */ private static String writeElement(String Element){ StringBuffer buffer=new StringBuffer(); buffer.append("\t@XmlElement(name=\""); buffer.append(Element); buffer.append("\")\r\n"); buffer.append("\tprivate "); buffer.append(firstToUp(Element)); buffer.append(" "); buffer.append(Element); buffer.append(";\r\n\r\n"); return buffer.toString(); } /** * 写元素(list) * @param Element 元素 * @return */ private static String writeElementList(String Element){ StringBuffer buffer=new StringBuffer(); buffer.append("\t@XmlElement(name=\""); buffer.append(Element); buffer.append("\")\r\n"); buffer.append("\tprivate List<"); buffer.append(firstToUp(Element)); buffer.append("> "); buffer.append(Element); buffer.append("s;\r\n\r\n");//如果是list加”S“ return buffer.toString(); } /** * 写属性 * @param attr 属性名称 * @return */ private static String writeAttribute(String attr){ StringBuffer buffer=new StringBuffer(); buffer.append("\t@XmlAttribute(name=\""); buffer.append(attr); buffer.append("\")\r\n"); buffer.append("\tprivate "); buffer.append("String"); buffer.append(" "); buffer.append(attr); buffer.append(";\r\n\r\n"); return buffer.toString(); } public static String writeGetterAndSetter(String param,String type){ //Getter StringBuffer buffer=new StringBuffer(); buffer.append("\r\n\tpublic "); buffer.append(type); buffer.append(" get"); buffer.append(firstToUp(param)); buffer.append("() {\r\n"); buffer.append("\t\treturn "); buffer.append(param); buffer.append(";\r\n"); buffer.append("\t}\r\n"); //Setter buffer.append("\tpublic void "); buffer.append("set"); buffer.append(firstToUp(param)); buffer.append("("); buffer.append(type); buffer.append(" "); buffer.append(param); buffer.append(") {\r\n"); buffer.append("\t\tthis."); buffer.append(param); buffer.append(" = "); buffer.append(param); buffer.append(";\r\n"); buffer.append("\t}\r\n"); 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
同语言下
.
List 切割成几份 工具类
.
一行一行读取txt的内容
.
Java PDF转换成图片并输出给前台展示
.
java 多线程框架
.
double类型如果小数点后为零则显示整数否则保留两位小
.
将图片转换为Base64字符串公共类抽取
.
sqlParser 处理SQL(增删改查) 替换schema 用于多租户
.
JAVA 月份中的第几周处理 1-7属于第一周 依次类推 29-
.
java计算两个经纬度之间的距离
.
输入时间参数计算年龄
可能有用的
.
C#实现的html内容截取
.
List 切割成几份 工具类
.
SQL查询 多列合并成一行用逗号隔开
.
一行一行读取txt的内容
.
C#动态修改文件夹名称(FSO实现,不移动文件)
.
c# 移动文件或文件夹
.
c#图片添加水印
.
Java PDF转换成图片并输出给前台展示
.
网站后台修改图片尺寸代码
.
处理大图片在缩略图时的展示
liuwbCoder
贡献的其它代码
(
2
)
.
获取本月的休息日和周末的日期
.
从XML文件中生成对应的bean
Copyright © 2004 - 2024 dezai.cn. All Rights Reserved
站长博客
粤ICP备13059550号-3