jaxb2实例以及和XStream的比较

 

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.util.Calendar;

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

public class JAXB2Tester { 

    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("person.xml"); 

        m.marshal(p,fw); 

        //下面代码演示将上面生成的xml转换为对象 

        FileReader fr = new FileReader("person.xml"); 

        Unmarshaller um = context.createUnmarshaller(); 

        Person p2 = (Person)um.unmarshal(fr); 

        System.out.println("Country:"+p2.getAddress().getCountry()); 

    } 

}  

@XmlRootElement//表示person是一个根元素 

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; 

    } 

enum Gender{ 

    MALE(true), 

    FEMALE (false); 

    private boolean value; 

    Gender(boolean _value){ 

        value = _value; 

    } 

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; 

    } 

 

 

运行该程序,我们会得到一个person.xml的文件,如下: 

 

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

 

<person name="JAXB2"> 

      <birthDay>2006-12-28T08:49:27.203+00: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 

 

 

 

注意:改功能也可用xStream加注释实现,xStream的jar包需要1.3或者以上。

jaxb2和xstream的区别:

jaxb2如果没有加@XmlElement等注释,是不会写入到xml中的,但是xstream不会

xstream没有加上注释,默认以属性名称写入子级的元素中

XStream还可以将bean转为json,功能比较强悍,个人建议使用xstream


你可能感兴趣的:(xml,xstream,jdk6)