本文使用的技术点:

JAXB2实现对象与XML之间的映射

JAXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。

重要的注解和说明

注解

说明

@XmlRootElement

将类或enum类型映射到XML元素,类名或名作为根节点

@XmlAttribute

将JavaBean属性映射到XML属性

@XmlElement

将JavaBean属性映射到源自属性名的XML元素

@XmlAnyAttribute

将JavaBean属性映射到通配符属性的映射

@XmlAnyElement

将JavaBean属性映射到XML infoset或JAXB

@XmlElements

一个用于多XmlElement注解的容器。

@XmlID

将JavaBean属性映射到XML ID

@XmlIDREF

将JavaBean属性映射到XML IDREF

@XmlList

用来将一个属性映射到一个List

@XmlSchema

将包映射到XML名称空间

@XmlTransient

该属性无需映射到XML

示例代码:

Address类

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

public class Address {

@XmlAttribute

String province;

@XmlElement

String area;

@XmlElement

String street;

public Address() {}

public Address(String province, String area, String street) {

this.province = province;

this.area = area;

this.street = street;

}

@Override

public String toString() {

return "Address{" +

"province='" + province + '\'' +

", area='" + area + '\'' +

", street='" + street + '\'' +

'}';

}

}

Person类

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement

public class Person{

@XmlAttribute

private String name;

@XmlElement

private int age;

@XmlElement

private Address address;

public Person() {

}

public Person(String name, int age, Address address) {

this.name = name;

this.age = age;

this.address = address;

}

@Override

public String toString() {

return "Person{" +

"name='" + name + '\'' +

", age=" + age +

", address=" + address +

'}';

}

}

测试类:

import javax.xml.bind.JAXBContext;

import javax.xml.bind.JAXBException;

import javax.xml.bind.Marshaller;

import javax.xml.bind.Unmarshaller;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

public class Test {

public static void main(String[] args) throws JAXBException, IOException {

JAXBContext jaxbContext = JAXBContext.newInstance(Person.class);

//根据Person对象转换为person.xml文件

Marshaller marshaller = jaxbContext.createMarshaller();

Address address = new Address("广东省","深圳市","宝安区");

Person person = new Person("niannianjiuwang", 20, address);

FileWriter fileWriter = new FileWriter("D:\\person.xml");

marshaller.marshal(person, fileWriter);

//根据person.xml文件转换为对象

FileReader fileReader = new FileReader("D:\\person.xml");

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();

Person personNew = (Person) unmarshaller.unmarshal(fileReader);

System.out.println(personNew);

}

}

输出文件结果:

20

深圳市

宝安区

输出控制台结果:

Person{name='niannianjiuwang', age=20, address=Address{province='广东省', area='深圳市', street='宝安区'}}

AXB是Java Architecture for XML Binding的缩写,可以将一个Java对象转变成为XML格式,反之亦然。我们把对象与关系数据库之间的映射称为ORM, 其实也可以把对象与XML之间的映射称为OXM(Object XML Mapping)。原来JAXB是Java EE的一部分,在JDK6中,SUN将其放到了Java SE中,这也是SUN的一贯做法。JDK6中自带的这个JAXB版本是2.0, 比起1.0(JSR 31)来,JAXB2(JSR 222)用JDK5的新特性Annotation来标识要作绑定的类和属性等,这就极大简化了开发的工作量。实际上,在Java EE 5.0中,EJB和Web Services也通过Annotation来简化开发工作。另外,JAXB2在底层是用StAX(JSR 173)来处理XML文档。

重要的注解和说明

注解

说明

@XmlRootElement

将类或enum类型映射到XML元素,类名或名作为根节点

@XmlAttribute

将JavaBean属性映射到XML属性

@XmlElement

将JavaBean属性映射到源自属性名的XML元素

@XmlAnyAttribute

将JavaBean属性映射到通配符属性的映射

@XmlAnyElement

将JavaBean属性映射到XML infoset或JAXB

@XmlElements

一个用于多XmlElement注解的容器。

@XmlID

将JavaBean属性映射到XML ID

@XmlIDREF

将JavaBean属性映射到XML IDREF

@XmlList

用来将一个属性映射到一个List

@XmlSchema

将包映射到XML名称空间

@XmlTransient

该属性无需映射到XML

java创建 xml_java创建和读取xml相关推荐

  1. java反射 创建对象_Java反射――读取XML文件,创建对象

    config.xml <?xml version="1.0" encoding="UTF-8"?> import java.io.*; import ...

  2. java dom4j 读取 xml_java使用dom4j读取xml示例

    package xmlRead; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; impor ...

  3. java 动态解析 xml_通过读取xml文件动态建表

    Ada female 21 13300008888 Ada@gmail.com 将上面的xml描述在数据库中创建一张表 import java.io.*; import java.sql.*; imp ...

  4. java quartz xml_java 使用quartz 定时xml 配置 与注解 以及注意事项

    xml配置实现: 1.选择所需要的jar 4.2.2.RELEASE org.springframework spring-oxm ${spring.version} org.springframew ...

  5. camel Java to xml_java – 当Camel从XML文件加载路由时,在注册表中找不到Bean

    我在camel中遇到问题,在运行时从 XML加载路由. 我搜索了我的问题,并在 http://grokbase.com/p/camel/users/117w8m6rbm/injecting-data- ...

  6. 自己动手之使用反射和泛型,动态读取XML创建类实例并赋值

    前言: 最近小匹夫参与的游戏项目到了需要读取数据的阶段了,那么觉得自己业余时间也该实践下数据相关的内容.那么从哪入手呢?因为用的是Unity3d的游戏引擎,思来想去就选择了C#读取XML文件这个小功能 ...

  7. C#来创建和读取XML文档 [转]

    C#来创建和读取XML文档  [关键词]:XML 录入:小鱼之家 来源:http://fisher.xundain.com 时间:2005-3-3 23:41:54 点击:85次 扩展标记语言XML( ...

  8. python读取xml编码gb2312_【转】python XML 操作总结(创建、保存和删除,支持utf-8和gb2312)...

    最近写程序需要用到xml操作,看了看python.org上面的几个xml类库,还是一头雾水,感觉太学术化了,都那么吝惜写几个例子.所以自己整理了一下,算是个小总结,和大家分享一下吧. 对于简单的操作x ...

  9. CorelDRAW VBA - 读取XML文件,根据内容批量创建图形

    目的 这篇教程将教会你如何使用 CorelDRAW VBA 来读取 XML 文件,并通过读取的内容来动态创建指定宽度和高度的矩形. 准备一个XML文件 打开记事本,粘贴以下内容,然后保存文件,文件名输 ...

最新文章

  1. python3.6.4安装教程-Python3.6.4官方版
  2. Python IDLE无法显示行号、Python IDLE shell里运行py文件
  3. 急救模式下安装rpm包
  4. tomcat 启动需要java环境吗?_三分钟教你Windows环境下,如何设置Tomcat随机自动启动?...
  5. 引用网易等相册的图片出现防盗链怎么办呢?看这里就迎刃而解!(转贴)
  6. latex中极限符号$与$$区别
  7. 共享一个可用的谷歌相机
  8. 威金病毒(viking)残留文件手动清除办法
  9. 19年恶意软件排行榜
  10. Confirming the Buzz about Hornets——2021美赛C题思路及题解
  11. 程序人生丨25岁毕业,月薪1万
  12. 行人重识别的挑战 与 最新进展 (35页PPT整理)
  13. 设置Word文档密码的两种方式
  14. 鸿蒙系统运行内存为啥只有8g,明明8G内存,系统却显示只有4G!为啥会这样?
  15. java数据结构通讯录管理系统_数据结构课程设计—通讯录管理系统
  16. 编程找出四位整数abcd 中满足下述关系的数:(ab+cd)(ab+cd)=abcd
  17. hooper篮球意思_这些篮球术语都什么意思?
  18. 项目规划管理 - 2
  19. 个人总结Android面试题目之二
  20. ImportError: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.26‘ not foun Python GDAL

热门文章

  1. PHP-线程安全与非线程安全版本的区别
  2. Democracy Player 0.8.5
  3. as2的Key.isDown方法在as3的代替
  4. 加载类型库/dll时出错 的解决方法
  5. PHP Lumen Laravel 解决validate方法自定义message无效的问题
  6. adb devices 找不到夜神模拟器解决方法
  7. 腾讯广告算法大赛已启动,逆向算法,等你来战
  8. NetAug(网络增强)—Dropout的反面
  9. python开发接口故障码_Python代码样例
  10. java tomcat输出信息,java – 如何在Tomcat中记录stdout输出?