快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

Java对象与XML文件之间相互转化(含源代码)

要求:JDK1.4以上


下载:http://spaner.zj.com
示例:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">


<web-app>
//  根元素必须对应一个java类,这里是WebApplicationLabel.java
//DocumentObject doc = new DocumentObject( "web-app" , WebApplicationLabel.class )
//  参数"web-app"对应根元素标签的名称,以下同

<servlet>
//  所有包含元素子结点的必须对应一个java类,这里是ServletLabel.java
//ElementObject serv=doc.addChild( ElementObject.MULTI , "servlet" ,ServletLabel.class , "servlets" );
//  在此元素在web-app中可以有0到n个servlet(对应参数ElementObject.MULTI),在WebApplicationLabel.java中
//必须有一个属性ServletLabel[] servlets(这里名称可自定,对应下一行的最后一个参数)及它的set和get方式
//  假如在web-app元素中有1到n个servlet元素,则第一个参数是ElementObject.MORETHANONE,并且在WebApplicationLabel.java中
//必须有一个属性ServletLabel[] servlets及它的set和get方式
//  假如在web-app元素中只答应一个servlet元素,则第一个参数是ElementObject.SINGLE,并且在WebApplicationLabel.java中
//必须有一个属性ServletLabel servlet及它的set和get方式
//  假如在web-app元素中有0或1个servlet元素,则第一个参数是ElementObject.OPTIONAL,并且在WebApplicationLabel.java中
//必须有一个属性ServletLabel servlet及它的set和get方式

<servlet-name>action</servlet-name>
//对于这种没有属性和元素子结点,只有文本子结点的元素,可以这样简朴处理
//serv.addSimpleChild(ElementObject.SINGLE , "servlet-name" , String.class ,"name");
//此元素是servlet的子结点,所以向serv这个对象添加,而不是向doc中添加,
//其中第一个参数的处理与servlet元素一样,在ServletLabel.java中有一个属性String name及它的set和get方式,
//这个属性只能是基本数据类型或String,String.class是指它的数据类型,"name"是属性的名称,
//假如是基本数据类型(int,long)等,对应类型是Integer.TYPE,Long.TYPE等,
//如:addSimpleChild(Element.OPTIONAL,"lable-name",Integer.TYPE,"name");
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
//serv.addSimpleChild(ElementObject.SINGLE,"servlet-class",String.class,"servletClass");
//同servlet-name
<init-param>
<param-name>debug</param-name>
<param-value>2</param-value>
</init-param>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<taglib>
<taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
<taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</web-app>

程序:WebApplicationLabel.java

public class WebApplicationLabel{//必须是public class
private ServletLabel[] servlets;
private ServletMapping[] maps;
private Taglib[] tags;

public WebApplicationLabel(){}//必须有public类型的无参数构造方式

public void setServlets(ServletLabel[] servlets){
this.servlets=servlets;
}
public ServletLabel[] getServlets(){
return servlets;
}

//其它get和set方式未列出,以下同

}

public class ServletLabel{
private String name;
private String servletClass;
private ArrayList params=new ArrayList();
private int startup;

public ServletLabel(){}

public void setName(String name){
this.name=name;
}

public String getName(){
return name;
}

public void setServletClass(String servletClass){
this.servletClass=servletClass;
}

public String getServletClass(){
return servletClass;
}

public int getStartup(){
return startup;
}
//这里定义一个整数类型的变量,它是可选的
public void setStartup(int startup){
return startup;
}

public ServletParam[] getParams(){
ServletParam[] rs=new ServletParam[params.size()];
return (ServletParam[])params.toArray(rs);
}
//注重这里,实际上不用定义变量ServletParam[] params,只要有get和set方式就行
public void setParams(ServletParam[] rs){
for(int i=0;i<rs.length;i++){
params.add(rs[i]);
}
}

public void addParams(ServletParam param){
params.add(param);
}

}

public class ServletParam{
private String name;
private String value;

public ServletParam(){}
//set和get方式略

}

public class ServletMapping{
private String name;
private String url;

public ServletMapping(){}
//set和get方式略

}

public class Tablib{
private String uri;
private String location;

public Tablib(){}
//set和get方式略

}

以下是测试方式:

注重 :以下并没有对web.xml文件全面定义,对一般的web.xml文件只能分析出上面列出的结点


public class Test(){
//使用static变量和块是为了加快第二次对xml文件的分析。你可以先加到main方式中进行测试,测试后再copy到static块
private static DocumentObject doc=new DocumentObject( "web-app" , WebApplicationLabel.class );//根元素
static{
ElementObject serv=doc.addChild( ElementObject.MULTI , "servlet" ,ServletLabel.class , "servlets" );//servlet元素
serv.addSimpleChild(ElementObject.SINGLE,"servlet-name",String.class,"name");//servlet中的name元素
serv.addSimpleChild(ElementObject.SINGLE,"servlet-class",String.class,"servletClass");//servlet中的servlet-class元素,注重大小写
serv.addSimpleChild(ElementObject.MULTI,"init-param",ServletParam.class,"params");//servlet中的init-param元素,它是0到n个
serv.addSimpleChild(ElementObject.OPTIONAL,"load-on-startup",Integer.TYPE,"startup");
//servlet中的load-on-startup元素,它是可选的int型.

ElementObject map=doc.addChild( ElementObject.MULTI , "servlet-mapping" ,ServletMapping.class , "maps" );
map.addSimpleChild(ElementObject.SINGLE,"servlet-name",String.class,"name");
map.addSimpleChild(ElementObject.SINGLE,"url-pattern",String.class,"url");

ElementObject tag=doc.addChild( ElementObject.MULTI , "taglib" ,ServletLabel.class , "servlets" );
map.addSimpleChild(ElementObject.SINGLE,"taglib-uri",String.class,"uri");
map.addSimpleChild(ElementObject.SINGLE,"taglib-location",String.class,"location");


/*

假如元素servlet有一个或多个属性,这样来处理:
serv.addAttribute ( String label , Class type , String property ,boolean required )
label是属性名称,type是类型(只能是基本类型或String),
property是它是ServletLabel.java中的属性名称,required是指它是否必须的

假如元素servlet中还包含了要处理的文本结点(如:<servlet name="action">org.apache.struts.action.ActionServlet</servlet>)
serv.addTextProperty ( String textProperty , Class textType ,boolean required )
textProperty是它在ServletLabel.java中的属性名称,type是类型(只能是基本类型或String),required是指它是否必须的
注重,调用了这个方式将不能再调用方式addSimpleChild和addChild方式,反之亦然。
*/

}

public static void main(String[] args){
WebApplicationLabel app=(WebApplicationLabel)doc.read(new File("d:/1.xml"));//读取文件


doc.write(app,new File("d:/2.xml"));//写入到XML文件

/*
写入文件时,假如一个元素
定义为ElementObject.SINGLE,但它的对应值为null,出错
定义为ElementObject.OPTIONAL,但它的对应值为null,不会出错
定义为ElementObject.MORETHANONE(多于一个),但它的对应值为null,出错
定义为ElementObject.MULTI,但它的对应值为null,不会出错
读取文件时,会忽略所有没有在doc中定义的结点
定义为ElementObject.SINGLE,但文件中没有此元素,出错
定义为ElementObject.OPTIONAL,但文件中没有此元素,不会出错
定义为ElementObject.MORETHANONE(多于一个),但文件中没有此元素,出错
定义为ElementObject.MULTI,但文件中没有此元素,不会出错
*/
}
}






返回类别: 教程
上一教程: 使用自定义标签,将结果集返回到jsp页面!(推荐方式)
下一教程: 用java制作excel格式报表

您可以阅读与"Java对象与XML文件之间相互转化(含源代码)"相关的教程:
· JAVA对象序列化保存为XML文件的工具类
· 从XML到Java代码的数据绑定之对象
· JAVA对象序列化保存为XML文件的工具类
· 从XML到Java代码的数据绑定之对象【来自JAVA家】
· java实现FTP功能(源代码)
    微笑服务 优质保证 索取样品