java实现XML与Object互转---xstream

实现XML与Object互转的工具有很多,这里使用的是xstream工具,需要xpp3.jar一起使用才可正常运行,本文用到的是[url=http://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream/1.4]xstream.1.4.jar[/url]和[url=http://mvnrepository.com/artifact/xpp3/xpp3/1.1.2a]xpp3-1.1.2.jar[/url]
进入正题
[b]Object转XML:[/b]
创建web项目
新建bean类:CheckOut.java

package xmlParse;

import java.util.List;

import com.thoughtworks.xstream.annotations.XStreamAlias;

public class CheckOut {
private String RoomNo;
private String RoomTypeName;
private String RoomBuildingName;
private String RoomBuildingCode;
private String RoomFloorName;
private String RoomFloorCode;
private String CheckInTime;
private String CheckOutTime;
private boolean CheckInRoom;
private boolean CheckOutRoom;
private List<GuestInfo> Guests;
public String getRoomNo() {
return RoomNo;
}
public void setRoomNo(String roomNo) {
RoomNo = roomNo;
}
public String getRoomTypeName() {
return RoomTypeName;
}
public void setRoomTypeName(String roomTypeName) {
RoomTypeName = roomTypeName;
}
public String getRoomBuildingName() {
return RoomBuildingName;
}
public void setRoomBuildingName(String roomBuildingName) {
RoomBuildingName = roomBuildingName;
}
public String getRoomBuildingCode() {
return RoomBuildingCode;
}
public void setRoomBuildingCode(String roomBuildingCode) {
RoomBuildingCode = roomBuildingCode;
}
public String getRoomFloorName() {
return RoomFloorName;
}
public void setRoomFloorName(String roomFloorName) {
RoomFloorName = roomFloorName;
}
public String getRoomFloorCode() {
return RoomFloorCode;
}
public void setRoomFloorCode(String roomFloorCode) {
RoomFloorCode = roomFloorCode;
}
public String getCheckInTime() {
return CheckInTime;
}
public void setCheckInTime(String checkInTime) {
CheckInTime = checkInTime;
}
public String getCheckOutTime() {
return CheckOutTime;
}
public void setCheckOutTime(String checkOutTime) {
CheckOutTime = checkOutTime;
}
public boolean getCheckInRoom() {
return CheckInRoom;
}
public void setCheckInRoom(boolean checkInRoom) {
CheckInRoom = checkInRoom;
}
public List<GuestInfo> getGuests() {
return Guests;
}
public void setGuests(List<GuestInfo> guests) {
this.Guests = guests;
}
public boolean isCheckOutRoom() {
return CheckOutRoom;
}
public void setCheckOutRoom(boolean checkOutRoom) {
CheckOutRoom = checkOutRoom;
}

public CheckOut() {
// TODO Auto-generated constructor stub
}
public CheckOut(String roomNo, String roomTypeName,
String roomBuildingName, String roomBuildingCode,
String roomFloorName, String roomFloorCode, String checkInTime,
String checkOutTime, boolean checkInRoom, boolean checkOutRoom) {
super();
RoomNo = roomNo;
RoomTypeName = roomTypeName;
RoomBuildingName = roomBuildingName;
RoomBuildingCode = roomBuildingCode;
RoomFloorName = roomFloorName;
RoomFloorCode = roomFloorCode;
CheckInTime = checkInTime;
CheckOutTime = checkOutTime;
CheckInRoom = checkInRoom;
CheckOutRoom = checkOutRoom;
}


}



创建bean类GuestInfo.java

package xmlParse;

import com.thoughtworks.xstream.annotations.XStreamAlias;

@XStreamAlias("GuestInfo")
public class GuestInfo {
public String GuestName;
public String IDCardNo;
public String IDCardTypeId;
public String Nationality;
public String CountryCode;
public String Gender;
public String Birthday;
public String Address;
public String CityCode;
public String ProvinceCode;
public String VisaNo;
public String VisaTypeId;
public String VisaValid;

public String getGuestName() {
return GuestName;
}
public void setGuestName(String guestName) {
GuestName = guestName;
}
public String getIDCardNo() {
return IDCardNo;
}
public void setIDCardNo(String iDCardNo) {
IDCardNo = iDCardNo;
}
public String getIDCardTypeId() {
return IDCardTypeId;
}
public void setIDCardTypeId(String iDCardTypeId) {
IDCardTypeId = iDCardTypeId;
}
public String getNationality() {
return Nationality;
}
public void setNationality(String nationality) {
Nationality = nationality;
}
public String getGender() {
return Gender;
}
public void setGender(String gender) {
Gender = gender;
}
public String getBirthday() {
return Birthday;
}
public void setBirthday(String birthday) {
Birthday = birthday;
}
public String getAddress() {
return Address;
}
public void setAddress(String address) {
Address = address;
}
public String getCityCode() {
return CityCode;
}
public void setCityCode(String cityCode) {
CityCode = cityCode;
}
public String getProvinceCode() {
return ProvinceCode;
}
public void setProvinceCode(String provinceCode) {
ProvinceCode = provinceCode;
}
public String getCountryCode() {
return CountryCode;
}
public void setCountryCode(String countryCode) {
CountryCode = countryCode;
}
public String getVisaNo() {
return VisaNo;
}
public void setVisaNo(String visaNo) {
VisaNo = visaNo;
}
public String getVisaTypeId() {
return VisaTypeId;
}
public void setVisaTypeId(String visaTypeId) {
VisaTypeId = visaTypeId;
}
public String getVisaValid() {
return VisaValid;
}
public void setVisaValid(String visaValid) {
VisaValid = visaValid;
}
public GuestInfo(String guestName, String iDCardNo, String iDCardTypeId,
String nationality, String countryCode, String gender,
String birthday) {
super();
GuestName = guestName;
IDCardNo = iDCardNo;
IDCardTypeId = iDCardTypeId;
Nationality = nationality;
CountryCode = countryCode;
Gender = gender;
Birthday = birthday;
}


}


现在创建测试类XStreamTest.java

import java.util.ArrayList;
import java.util.List;

import xmlParse.CheckOut;
import xmlParse.GuestInfo;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;


public class XStreamTest {

public static void main(String[] args) {
XStream xStream = new XStream(new DomDriver());
CheckOut check = new CheckOut("1","12","13","14","15","16","17","18",true,false);
List<GuestInfo> list = new ArrayList<GuestInfo>();
for(int i =0; i < 2; i++){
GuestInfo g = new GuestInfo("1", "2", "3", "4", "countryCode", "gender", "birthday");
list.add(g);
}
check.setGuests(list);

System.out.println(xStream.toXML(check));
}

}


运行的结果为:
[quote]
<xmlParse.CheckOut>
<RoomNo>1</RoomNo>
<RoomTypeName>12</RoomTypeName>
<RoomBuildingName>13</RoomBuildingName>
<RoomBuildingCode>14</RoomBuildingCode>
<RoomFloorName>15</RoomFloorName>
<RoomFloorCode>16</RoomFloorCode>
<CheckInTime>17</CheckInTime>
<CheckOutTime>18</CheckOutTime>
<CheckInRoom>true</CheckInRoom>
<CheckOutRoom>false</CheckOutRoom>
<Guests>
<xmlParse.GuestInfo>
<GuestName>1</GuestName>
<IDCardNo>2</IDCardNo>
<IDCardTypeId>3</IDCardTypeId>
<Nationality>4</Nationality>
<CountryCode>countryCode</CountryCode>
<Gender>gender</Gender>
<Birthday>birthday</Birthday>
</xmlParse.GuestInfo>
<xmlParse.GuestInfo>
<GuestName>1</GuestName>
<IDCardNo>2</IDCardNo>
<IDCardTypeId>3</IDCardTypeId>
<Nationality>4</Nationality>
<CountryCode>countryCode</CountryCode>
<Gender>gender</Gender>
<Birthday>birthday</Birthday>
</xmlParse.GuestInfo>
</Guests>
</xmlParse.CheckOut>
[/quote]
这里解析出来GuestInfo和CheckOut类都是全路径名 , 如果你只想只保留类名,xstream提供了两种解决方式:
1、alias(name, class)方法
xStream.alias("CheckOut", CheckOut.class);
xStream.alias("GuestInfo", GuestInfo.class);
2、注解
类名前加上@XStreamAlias("your alias name")

package xmlParse;
import java.util.List;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("CheckOut")
public class CheckOut {}


package xmlParse;
import com.thoughtworks.xstream.annotations.XStreamAlias;
@XStreamAlias("GuestInfo")
public class GuestInfo {}

并在xstream实例化对象处 xStream.autodetectAnnotations(true);即可;


[b]XML转Object[/b]
这里弄不好就会转换出错,建议先把对象转换成xml , 看明白其格式再做xml转object

创建CheckOut.java 上面已创建,不做累述

创建GuestInfo.java 上面已创建,不做累述

编写XSreamTest.java测试类

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import xmlParse.CheckOut;
import xmlParse.GuestInfo;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;


public class XStreamTest {

public static void main(String[] args) throws FileNotFoundException {
XStream xStream = new XStream(new DomDriver());
xStream.alias("CheckOut", CheckOut.class);
xStream.alias("GuestInfo", GuestInfo.class);
InputStream input = new FileInputStream(new File("C:/Users/lucky god/Desktop/CheckOut.xml"));
CheckOut obj = (CheckOut)xStream.fromXML(input);
System.out.println(obj.toString());
}

}


附上CheckOut.xml的内容


<?xml version="1.0" encoding="UTF-8"?>
<CheckOut>
<RoomNo/>
<RoomTypeName/>
<RoomBuildingName/>
<RoomBuildingCode/>
<RoomFloorName/>
<RoomFloorCode/>
<CheckInTime>2011-11-11 11:22:33</CheckInTime>
<CheckOutTime>2011-11-11 11:22:33</CheckOutTime>
<CheckOutRoom>true</CheckOutRoom>
<Guests>
<GuestInfo>
<GuestName>1</GuestName>
<IDCardNo>1</IDCardNo>
<IDCardTypeId/>
<Nationality/>
<CountryCode/>
</GuestInfo>
<GuestInfo>
<GuestName>2</GuestName>
<IDCardNo>2</IDCardNo>
<IDCardTypeId/>
<Nationality/>
<CountryCode/>
</GuestInfo>
</Guests>
</CheckOut>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值