java对象与xml的转换

来源:互联网 发布:淘宝绿知了官网 编辑:程序博客网 时间:2024/04/30 18:47
  将一个java对象转换为xml文件,或者将一个xml文件转换为一个java对象,神奇吧,其实不难,jdk1.6中的JAXB API就可以做到。

1、准备工作
必须是jdk1.6环境下,其实只要包含相应jar包就行了。在jdk1.6下,还需要一个包比如jaxb-impl-2.01.jar就是一个。因为缺少com.sun.xml.bind.v2.ContextFactory类,所以要把包含此类的jar包包含进来,以上jar就是其中一个,可以在http://www.findjar.com/jar/xfire/jars/jaxws-api-2.0.jar.html此站查找任何的类所在的jar。

2、开发所需的类
Person类
public class Person {    
    @XmlElement
    Calendar birthDay; //birthday将作为person的子元素

    @XmlAttribute
    String name; //name将作为person的的一个属性

    public Address getAddress() {
        return address;
    }

    @XmlElement
    Address address; //address将作为person的子元素

    @XmlElement
    Gender gender; //gender将作为person的子元素

    @XmlElement
    String job; //job将作为person的子元素

    public Person(){
    }
    
    public Person(Calendar birthDay, String name, Address address, Gender gender, String job) {
        this.birthDay = birthDay;
        this.name = name;
        this.address = address;
        this.gender = gender;
        this.job = job;
    }
}


Gender枚举
public enum Gender{
    MALE(true),
    FEMALE (false);
    private boolean value;
    Gender(boolean _value){
        value = _value;
    }
}

Address类
public class Address {
    @XmlAttribute
    String country;
    @XmlElement
    String state;
    @XmlElement
    String city;
    @XmlElement
    String street;
    String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中

    public Address() {
    }

    public Address(String country, String state, String city, String street, String zipcode) {
        this.country = country;
        this.state = state;
        this.city = city;
        this.street = street;
        this.zipcode = zipcode;
    }


    public String getCountry() {
        return country;
    }
}

测试程序 

public class JAXBTest {
public static void main(String[] args) throws JAXBException, IOException {
JAXBContext context = JAXBContext.newInstance(Person.class);
// 下面代码演示将对象转变为xml
Marshaller m = context.createMarshaller();
Address address = new Address("China", "Beijing", "Beijing",
"ShangDi West", "100080");
Person p = new Person(Calendar.getInstance(), "JAXB2", address,
Gender.MALE, "SW");
FileWriter fw = new FileWriter("E:\\test\\person.xml");
m.marshal(p, fw);

// 下面代码演示将上面生成的xml转换为对象
FileReader fr = new FileReader("E:\\test\\person.xml");
Unmarshaller um = context.createUnmarshaller();
Person p2 = (Person) um.unmarshal(fr);
System.out.println("Country:" + p2.getAddress().getCountry());
}
}

生成的xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person name="JAXB2">
<birthDay>2009-05-16T14:31:22.437+08:00
</birthDay>
<address country="China">
<state>Beijing</state>
<city>Beijing</city>
<street>ShangDi West</street>
</address>
<gender>MALE</gender>
<job>SW</job>
</person>
控制台输出:
Country:China
原创粉丝点击