`
newleague
  • 浏览: 1500764 次
  • 性别: 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());
    }
}

分享到:
评论

相关推荐

    JAXBContext测试Java对象与xml的相互转换Demo

    在Java世界中,Java Architecture for XML Binding (JAXB) 是一个强大的工具,它允许开发者将Java...通过深入学习和实践JAXBContext的使用,开发者可以更好地掌握Java与XML之间的交互,提升代码的可读性和可维护性。

    java对象与xml的互相转换

    通过定义Java类和使用JAXB提供的`Marshaller`和`Unmarshaller`,我们可以方便地在Java对象和XML文档之间进行互换。对于更复杂的场景,例如Web服务交互,可能还需要其他相关的库,如`jaxws-api`。

    jaxb和jackson的jar

    1. **JAXB与Java Bean**:JAXB可以直接将Java Bean对象转换成XML文档,反之亦然。只需在Bean类上添加适当的注解,然后使用JAXBContext创建实例,再调用`marshal`和`unmarshal`方法,即可实现对象和XML的双向转换。 ...

    JAXBDemo:JAXB(Java Architecture for XML Binding)的演示,它允许在 XML 和 java 类之间轻松转换

    通过使用注解或XML绑定文件(如`jaxb.xjb`或`bindings.xml`),开发者可以指定XML元素和属性与Java类的字段之间的对应关系。例如,我们可以使用`@XmlRootElement`注解标记一个Java类作为XML文档的根元素,用`@...

    JAVA与XMLpdf资料

    4. **持久化**:Hibernate等ORM(Object-Relational Mapping)工具利用XML来描述数据库映射,使Java对象可以直接与数据库交互。 5. **文档生成与解析**:Java也可以用于生成和解析XML文档,例如Apache FOP用于生成...

    JAXB 学习笔记

    JAXB允许我们定义Java类,并通过注解或XML绑定文件(JAXBContext)将这些类映射到XML元素。当Java对象被转换为XML时,类的属性对应于XML元素,类的方法则对应于XML的属性或元素内容。 #### 1.2 JAXBContext ...

    SpringBoot返回json和xml的示例代码

    在Spring Boot项目中,通常使用JSON格式作为数据交换格式,但是某些特定情况下,比如与旧系统交互或出于XML格式的特定要求,可能需要以XML格式返回数据。Spring Boot默认是支持JSON的,对于XML的返回,可以通过集成...

    JAVA程序设计 EJB、XML与数据库

    《JAVA程序设计 EJB、XML与数据库》这本书深入探讨了Java编程中三个核心领域的关键概念和技术,包括Enterprise JavaBeans(EJB)、XML以及数据库交互。这些主题在现代企业级应用开发中占据了至关重要的地位。 首先...

    Java&XML.rar_XML java_xml

    它代表了一个应用程序的主窗口或框架,用户可以通过这个界面与程序交互。另一方面,www.pudn.com.txt可能是一个文本文件,其中包含了关于这个项目的来源、作者信息或者使用指南,因为www.pudn.com是一个知名的编程...

    用xml轻松开发web网站

    - **富客户端应用**:AJAX(Asynchronous JavaScript and XML)技术中,XML常用于后台与前端异步交互数据。 - **文档存储**:如SVG(Scalable Vector Graphics)是基于XML的图像格式,WSDL(Web Services ...

    本地提供XML数据 MyEclipse Java Web部分

    2. **Java与XML的交互** - Java提供了多种API来处理XML,如DOM(Document Object Model)、SAX(Simple API for XML)、StAX(Streaming API for XML)以及JAXB(Java Architecture for XML Binding)。 - DOM解析...

    用xml轻松开发Web网站

    - XML与关系数据库:通过XQuery或XPath将XML数据与SQL数据库进行交互,例如使用JAXB进行Java对象和XML之间的映射。 6. XML在Web配置中的应用: - Spring框架:广泛使用XML配置文件来管理Bean和依赖注入,简化企业...

    XML.rar_XML java_java call_java xml_xml 读写_xml读写 java

    对于XML的读写,Java提供了许多库,如JAXB(Java Architecture for XML Binding)用于对象与XML之间的映射,方便数据交换;DOM4J提供了一套完整的DOM、SAX和JDOM接口,便于XML处理;另外,Java标准库中的javax.xml....

    java根据xml生成schema_xsd_生成javabean2

    这个过程可以帮助开发者快速构建与XML数据交互的应用,而无需手动编写大量的数据封装和转换代码。通过批处理脚本自动化这些步骤,可以提高开发效率,减少错误,并且使得代码更符合XML标准。在实际开发中,理解并掌握...

    一个简单的xml使用测试实例

    XML(eXtensible Markup Language)是...`StudentBean` 类则提供了一个简单的数据模型,方便与XML数据交互。了解这一过程对于理解XML在Java应用程序中的应用至关重要,特别是对于那些需要处理跨平台数据交换的开发者。

    javaweb_-_方立勋_-_xml基础.zip

    学习XML基础对于Java Web开发者至关重要,因为XML不仅在后端服务中扮演重要角色,也是前端与后端交互的常见数据格式。通过深入理解XML,开发者可以更有效地设计和管理复杂的数据结构,提高程序的可维护性和可扩展性...

    J2EE之xml的建模

    1. **DTD(Document Type Definition)与XSD(XML Schema)**:XML文档需要有相应的规范来约束其结构,这可以通过DTD或XSD实现。DTD是较早的定义XML结构的方式,而XSD提供了更强大的数据类型和验证机制。 2. **命名...

    xml_java指南

    二、Java与XML的交互 1. 解析XML:Java提供了多种解析XML的方法,包括DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)。DOM将整个XML文档加载到内存中,形成一棵树状结构...

    Java & XML应用

    通过XML配置,Spring可以轻松地创建、配置和管理bean,实现松耦合和可测试性。 在Web服务领域,Java的JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)允许开发者利用XML来...

Global site tag (gtag.js) - Google Analytics