Jaxb 通过bean与xml交互

@XmlAccessorType(XmlAccessType.FIELD)
// 用于控制字段或属性的序列化。
// FIELD ,JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML
// NONE, 只有使用一些 JAXB 注释专门对它们进行注释的所有字段或属性才绑定到 XML。
// PROPERTY, JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML
// PUBLIC_MEMBER, 每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML
// 包上的 @XmlAccessorType 注释可应用于包中的所有类
@XmlType(propOrder = {"job","address"} )
@XmlRootElement
// 表示person是一个根元素
class  Person  {
    
// @XmlElement
    
// Calendar birthDay; //birthday将作为person的子元素
    @XmlAttribute (name="NAME")
    String name; 
// name将作为person的的一个属性

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

    
// @XmlElement
    
// name=“JOb”说明在xml文件元素名为“JOb”,若没有此项说明,则采用默认策略即job
    @XmlElement(name="JOb")
    String job; 
// job将作为person的子元素

 
public Person(){
 
 }
  
    public String getJob() {
        
return job;
    }


    
public void setJob(String job) {
        
this.job = job;
    }


    
public String getName() {
        
return name;
    }


    
public void setName(String name) {
        
this.name = name;
    }


    
public void setAddress(Address address) {
        
this.address = address;
    }


    
public Address getAddress() {
        
return address;
    }

}

@XmlAccessorType(XmlAccessType.FIELD)
class  Address  {
//Address的属性
    @XmlAttribute
    String country;
//Address的子元素即child
    @XmlElement
    String state;
//    @XmlElement
//    String city;
//    @XmlElement
//    String street;
//    String zipcode; //由于没有添加@XmlElement,所以该元素不会出现在输出的xml中

   public Address() {
    }



    
public String getCountry() {
        
return country;
    }


    
public String getState() {
        
return state;
    }


    
public void setState(String state) {
        
this.state = state;
    }


    
public void setCountry(String country) {
        
this.country = country;
    }

}


测试代码

 

public   class  JAXB2Tester  {
    
public static void main(String[] args) throws JAXBException, IOException {
        JAXBContext context 
= JAXBContext.newInstance(Person.class);
        
// 下面代码演示将对象转变为xml
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, 
true);
        
// Address address = new Address("China", "Beijing", "Beijing", "ShangDi
        
// West", "100080");
        Address address = new Address();
        address.setCountry(
"China");
        address.setState(
"beijing");
        
// Person p = new Person(Calendar.getInstance(), "JAXB2", address,
        
// Gender.MALE, "SW");
        Person p = new Person();
        p.setName(
"zhangsan");
        p.setJob(
"gongzuo");
        p.setAddress(address);
        
        FileWriter fw 
= new FileWriter("d:/person.xml");
        Writer w 
= new StringWriter();
        
//输出到控制台
        m.marshal(p, System.out);
        
//导入到文件
        m.marshal(p, fw);
        
//导入到字符流中
        m.marshal(p, w);
        
// 下面代码演示将上面生成的xml转换为对象
        Unmarshaller um = context.createUnmarshaller();
        FileReader fr 
= new FileReader("d:/person.xml");
        
//从xml文件中解析
        
// um.unmarshal(new File("d:/person.xml"));
        
//从字节流中解析
        
// um.unmarshal(new FileInputStream("d:/person.xml"));
        
//从字符流中解析
        Person p2 = (Person) um.unmarshal(new StreamSource(new StringReader(w.toString())));
        System.out.println(
"Country:" + p2.getAddress().getCountry());
    }

}

注,可以通过xsd文件生成bean类,通过如 xjc person.xsd -d d:/testdir  -p com.test.jaxb 来生成bean类

其中-d 是说明输出文件的路径-p是包名 可以通过直接xjc命令来查询参数意义

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值