java对象与xml文件转换

XStream 是一个轻量级的、简单易用的开放源代码Java™库,用于将 Java 对象序列化为 XML 或者再转换回来

XStream 对象相当Java对象和XML之间的转换器,转换过程是双向的。创建XSteam对象的方式很简单,只需要new XStream()即可。
Java 到xml,用toXML()方法。
Xml到Java,用fromXML()方法。

在没有任何设置默认情况下,java到xml的映射,是java成员名对应xml的元素名,java类的全名对应xml根元素的名字。而实际中,往往是xml和java类都有了,要完成相互转换,必须进行别名映射。
 
XStream 的编码:
本身并没有实现编码,必须依靠java.io.Writer来实现输出编码的转换。

XStream 的常用方法
xstream.omitField(mytest.class,"name");定义某一个属性的值不进行xml序列化。
xstream.alias("cat", Cat.class); 对某一个类进行别名定义
xstream.aliasField("age",Cat.class, "mAge");对某一个类的属性进行别名定义。
xstream.useAttributeFor(String.class);对所有String类型的字段定义为属性tag显示
xstream.useAttributeFor("name".String.class);对所有String类型的字段名成为name 定义为属性tag显示

package com.ljh.bean;
public class Address {
    private int id;
    private String addressName;
    public Address(){}
    public Address(int id, String addressName) {
         this.id= id;
         this.addressName= addressName;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
         this.id= id;
    }
    public String getAddressName() {
         return addressName;
    }
    public void setAddressName(String addressName) {
         this.addressName= addressName;
    }
}

package com.ljh.bean;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class Person {
    private int id;
    private String name;
    private int age;
    private String birthday;
    private List<Address> addresses = new ArrayList<Address>();
    private Date date = new Date();  
    public Person(int id, String name, int age,String birthday) {
         this.id= id;
         this.name= name;
         this.age= age;
         this.birthday= birthday;
    }
    public List<Address> getAddresses() {
         return addresses;
    }
    public void setAddresses(List<Address> addresses) {
         this.addresses= addresses;
    }
    public Date getDate() {
         return date;
    }
    public void setDate(Date date) {
         this.date= date;
    }
    public String getBirthday() {
         return birthday;
    }

    public void setBirthday(String birthday) {
         this.birthday= birthday;
    }
    public int getId() {
         return id;
    }
    public void setId(int id) {
         this.id= id;
    }
    public String getName() {
         return name;
    }
    public void setName(String name) {
         this.name= name;
    }
    public int getAge() {
         return age;
    }
    public void setAge(int age) {
         this.age= age;
    }
    public void add(Address address){
         addresses.add(address);
    }
}

package com.ljh.xstream;
import java.io.PrintWriter;
import com.ljh.bean.Address;
import com.ljh.bean.Person;
import com.thoughtworks.xstream.XStream;
public class XStreamTest {
    public static void main(String[] args) throws Exception {
         Address address1 = new Address(1,"北京");
         Address address2 = new Address(2,"天津");
         Address address3 = new Address(3,"上海");
         Person p = new Person(1,"ljh",38,"2111-11-11 11:11");
         p.add(address1);
         p.add(address2);
         p.add(address3);
         XStream xstream = new XStream();
         //对某一个类进行别名定义
         xstream.alias("地址",Address.class);
         xstream.alias("联系人",Person.class);
         //对某一个类的属性进行别名定义
         xstream.aliasField("编号",Person.class, "id");
         xstream.aliasField("姓名",Person.class, "name");
         xstream.aliasField("年龄",Person.class, "age");
         xstream.aliasField("联系方式",Person.class, "addresses");
         xstream.aliasField("编号",Address.class, "id");
         xstream.aliasField("名称",Address.class, "addressName");
         xstream.aliasField("生日",Person.class, "birthday");
         //定义某一个属性的值不进行xml序列化。
         xstream.omitField(Person.class,"date");
         //对id字段定义为属性显示
         xstream.useAttributeFor(Person.class,"id");
         xstream.useAttributeFor(Address.class,"id");
         //对所有String类型的字段名成为name 定义为属性tag显示
         //xstream.useAttributeFor("name".String.class);     
         xstream.toXML(p,new PrintWriter("c:\\person.xml","utf-8"));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值