`
newleague
  • 浏览: 1474960 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Jaxb 通过bean与xml交互

阅读更多

package test;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Writer;

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.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.transform.stream.StreamSource;

@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());
    }
}

分享到:
评论

相关推荐

    JAVA_API1.6文档(中文)

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    Spring.3.x企业应用开发实战(完整版).part2

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    Spring3.x企业应用开发实战(完整版) part1

    10.4.1 Spring通过单实例化Bean简化多线程问题 10.4.2 启动独立线程调用事务方法 10.5 联合军种作战的混乱 10.5.1 Spring事务管理器的应对 10.5.2 Hibernate+Spring JDBC混合框架的事务管理 10.6 特殊方法成漏网之鱼...

    java api最新7.0

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    JavaAPI1.6中文chm文档 part1

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    JavaAPI中文chm文档 part2

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    [Java参考文档]

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    [Java参考文档].JDK_API 1.6

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    Java 1.6 API 中文 New

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

    JDK_1_6 API

    javax.xml.bind.annotation.adapters XmlAdapter 及其规范定义的子类允许任意 Java 类与 JAXB 一起使用。 javax.xml.bind.attachment 此包由基于 MIME 的包处理器实现,该处理器能够解释并创建基于 MIME 的包格式的...

Global site tag (gtag.js) - Google Analytics