XStream xml2object 和 object2xml

首先我们把xstream-distribution-1.4.4-bin里面的jar加到编译和运行环境里。
然后,我们定义一个pojo类。注意它不需要implements java.io.Serializable

public class SexyWoman {
private String name;
private long high;
private long weight;
public static String face="pretty";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public long getHigh() {
return high;
}
public void setHigh(long high) {
this.high = high;
}
public long getWeight() {
return weight;
}
public void setWeight(long weight) {
this.weight = weight;
}

}



然后我们去写运行测试类。
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;
public class XStreamTest {
public static void main(String[] args) {
SexyWoman sw1=new SexyWoman();
sw1.setName("maggie");
sw1.setHigh(172);
sw1.setWeight(65);
sw1.face="ddd";
String xmlContent=doPojo2Xml(sw1);
System.out.println(xmlContent);
System.out.println("\n\n\n");
SexyWoman sw2=new SexyWoman();
Object obj=doXml2Pojo(xmlContent,sw2);
System.out.println(((SexyWoman)obj).getName());
}

public static String doPojo2Xml(Object obj){
XStream xstream=new XStream(new DomDriver());
xstream.alias(obj.getClass().getSimpleName(), obj.getClass());
String xmlContent=xstream.toXML(obj);
return xmlContent;
}

public static Object doXml2Pojo(String xmlContent,Object obj){
XStream xstream=new XStream(new DomDriver());
xstream.alias(obj.getClass().getSimpleName(), obj.getClass());
Object getObj=xstream.fromXML(xmlContent);
return getObj;
}
}


最后输出

<SexyWoman>
<name>maggie</name>
<high>172</high>
<weight>65</weight>
</SexyWoman>


maggie


这里可以发现 static 属性并没有被进入xml中。

这里我们要注意的是String最大长度是65xxx, 所以我们不能用太大的类和xml.否则会出问题。当然Xstream开源里有另外的api专门针对这种问题。


如果我们给她加辆车呢
public class Car implements java.io.Serializable{
private String cardName;

public String getCardName() {
return cardName;
}

public void setCardName(String cardName) {
this.cardName = cardName;
}
}
public class XStreamTest {
public static void main(String[] args) {
SexyWoman sw1=new SexyWoman();
sw1.setName("maggie");
sw1.setHigh(172);
sw1.setWeight(65);
sw1.face="ddd";
Car car1=new Car();
car1.setCardName("ppo");
sw1.setCar(car1);
String xmlContent=doPojo2Xml(sw1);
System.out.println(xmlContent);
System.out.println("\n\n\n");
SexyWoman sw2=new SexyWoman();
Object obj=doXml2Pojo(xmlContent,sw2);
System.out.println(((SexyWoman)obj).getName());
}

public static String doPojo2Xml(Object obj){
XStream xstream=new XStream(new DomDriver());
xstream.alias(obj.getClass().getSimpleName(), obj.getClass());
String xmlContent=xstream.toXML(obj);
return xmlContent;
}

public static Object doXml2Pojo(String xmlContent,Object obj){
XStream xstream=new XStream(new DomDriver());
xstream.alias(obj.getClass().getSimpleName(), obj.getClass());
Object getObj=xstream.fromXML(xmlContent);
return getObj;
}
}



那么就输出了

<SexyWoman>
<name>maggie</name>
<high>172</high>
<weight>65</weight>
<car>
<cardName>ppo</cardName>
</car>
</SexyWoman>


maggie
XStream组件进行ObjectXML互转用法 1.所需求jar包: xstream-1.3.1.jar 2.如果仅进行OBJECTXML之间互转只需要这一个jar 包及XStream这一个类就可又了 用法说明: 1.OBJECTXML //第一步:准备好要进行XML转换的OBJECT对象,并且类里的属性都要有get与Set方法; 如下: Address address1 = new Address("郑州市经三路", "450001"); Address address2 = new Address("西安市雁塔路", "710002"); List addList = new ArrayList(); addList.add(address1); addList.add(address2); Profile profile = new Profile("软件工程师", "13512129933", "备注说明"); Person person = new Person("熔岩", "27", profile, addList); //第二步:创建一个XStream对象 XStream xStream = new XStream(); //第三步:进行转换 String xml = xStream. toXML(person); System.out.println(xml); //输出如下: //你会发明输出的XML节点的类名是类的全路径名 //如果要解决这一问题就需要进行转换前的装配XStream为此提供一个配置类名的方法 alias(“nodeName”,”class”); 其中nodeName 即XML的节点名称 其中class 即要映射到XML节点上的类 如: xStream.alias("PERSON", Person.class); xStream.alias("PROFILE", Profile.class); xStream.alias("ADDRESS", Address.class); //配置完成输出结果 可以看出person类的name和age属性映射出的节点名称与属性名称相同,那么XStream也支持对类属性的映射配置方法 : aliasField(“节点名称”,”类名称”,”属性名”) 如下: xStream.aliasField("PROFILE", Person.class, "profile"); xStream.aliasField("ADDLIST", Person.class, "addlist"); xStream.aliasField("Add", Address.class, "add"); xStream.aliasField("Job", Profile.class, "job"); 注:如果没有特殊要求最好不要配置属性节点的映射,否则如果再将生成的XML转换成OBJECT时将会非常麻烦。 //如果我们想实现又下的需求。 //XStream 还提供了装配节点属性的方法, useAttributeFor(“类”, “属性名”); 如下: xStream.useAttributeFor(Person.class,”name”); xStream.useAttributeFor(Person.class,”age”); 2.XMLOBJECT XMLOBJECT 只要调用xStream.fromXML(xml)方法,但同样要进行相关属性及类的映射。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值