1.说明

JAXB是Java Architecture for XML Binding,
即用于XML绑定的Java体系结构,
JAXB作为JDK的一部分,
能便捷地将Java对象与XML进行相互转换。
JAXB能将Java对象的内容写到XML文件,
也能读取XML文件反向生成Java对象。
JAXB是一个业界标准,
是一项可以根据XML Schema产生Java类的技术。
下面的示例代码基于JDK8,
不需要额外引入jar包,
只需要几个注解,
就可以方便使用JAXB功能。

2.JAXBContext类

通过使用JAXBContext类,
生成上下文对象,
然后生成Marshaller对象,
用于把Java对象转成XML文件,
再生成Unmarshaller对象,
把上面生成的XML文件转换成Java对象。

这里演示Person类和XML的互相转换,
下面首先定义Person.java类,
注意在类名上面使用@XmlRootElement注解,
在属性的set方法上面使用@XmlElement注解:

package javax.xml.bind;

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement
public class Person {
private int id; private String name; private String gender; private String addr; public Person() {
} public Person(String name, String gender, String addr) {
this.name = name;
this.gender = gender;
this.addr = addr;
} public int getId() {
return id;
} @XmlElement
public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} @XmlElement
public void setName(String name) {
this.name = name;
} public String getGender() {
return gender;
} @XmlElement
public void setGender(String gender) {
this.gender = gender;
} public String getAddr() {
return addr;
} @XmlElement
public void setAddr(String addr) {
this.addr = addr;
} @Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", gender=" + gender + ", addr=" + addr + "]";
}
}

下面给出JAXBContextParseXML.java类,
演示了Java对象到XML的转换,
以及XML到Java对象的转换:

package javax.xml.bind;

import java.io.File;

/**
* 使用JAXBContext上下文对象,通过实体对象直接生成XML,以及把XML直接解析成对应的实体类实例
*
*/
public class JAXBContextParseXML {
public static final String FILE_NAME = "src/main/resources/person.xml"; public static void main(String[] args) throws Exception {
java2XML();
xml2java();
} /**
* 通过实体对象直接生成XML
*/
public static void java2XML() throws Exception {
Person person = new Person("yuwen", "男", "南京"); File file = new File(FILE_NAME);
// 根据Person类生成上下文对象
JAXBContext jc = JAXBContext.newInstance(Person.class);
// 从上下文中获取Marshaller对象,用于把bean转换为xml
Marshaller ma = jc.createMarshaller();
// 以下是为生成xml做的一些配置
// 格式化输出,即按标签自动换行,否则就是一行输出
ma.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
// 设置编码(默认编码就是utf-8)
ma.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
// 是否省略xml头信息,默认不省略(false)
ma.setProperty(Marshaller.JAXB_FRAGMENT, false); // 编组,把Person对象转换为xml
ma.marshal(person, file);
System.out.println("generateXML=" + file.getName());
} /**
* 把XML直接解析成对应的实体类实例
*/
public static void xml2java() throws Exception {
// 从上下文中获取Unmarshaller对象
JAXBContext jc = JAXBContext.newInstance(Person.class);
Unmarshaller uma = jc.createUnmarshaller(); // 把XML文件解析为Person对象
File file = new File(FILE_NAME);
Person person = (Person) uma.unmarshal(file);
System.out.println(person);
}
}

输出的控制台内容如下:

generateXML=person.xml
Person [id=0, name=yuwen, gender=男, addr=南京]

输出的person.xml如下:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<person>
<addr>南京</addr>
<gender>男</gender>
<id>0</id>
<name>yuwen</name>
</person>

3.JAXB类

通过JAXB类提供的静态方法,
可以帮助使用者简单,快速上手JAXB。
为了性能上的考虑,
JAXB将会对JAXBContext做缓存。

示例代码JAXBParseXML.java如下:

package javax.xml.bind;

import java.io.File;

/**
* 使用JAXB的静态方法(推荐),通过实体对象直接生成XML,以及把XML直接解析成对应的实体类实例
*
*/
public class JAXBParseXML {
public static final String FILE_NAME = "src/main/resources/person.xml"; public static void main(String[] args) throws Exception {
java2XML();
xml2Java();
} /**
* 通过实体对象直接生成XML
*/
public static void java2XML() throws Exception {
Person person = new Person("yuwen", "男", "南京");
File file = new File(FILE_NAME);
// 输出到文件
JAXB.marshal(person, file);
System.out.println("generateXML=" + file.getAbsolutePath());
// 输出到控制台
JAXB.marshal(person, System.out);
} /**
* 把XML直接解析成对应的实体类实例
*/
public static void xml2Java() throws Exception {
File file = new File(FILE_NAME);
Person person = JAXB.unmarshal(file, Person.class);
System.out.println(person);
}
}

4.参考文章

JABX 教程JAXB教程–入门

XML解析和创建的JAXB方式的更多相关文章

  1. UI进阶 解析XML 解析JSON

    1.数据解析 解析的基本概念 所谓“解析”:从事先规定好的格式中提取数据 解析的前提:提前约定好格式,数据提供方按照格式提供数据.数据获取方则按照格式获取数据 iOS开发常见的解析:XML解析.JSO ...

  2. Android中XML解析-PULL解析

    前面写了两篇XML解析的Dom和SAX方式,Dom比较符合思维方式,SAX事件驱动注重效率,除了这两种方式以外也可以使用Android内置的Pull解析器解析XML文件. Pull解析器的运行方式与 ...

  3. java基础篇---XML解析(二)

    XML解析之最流行的方式:DOM4J dom4j是使用java语言编写的,用于读,写,操作XML的一套组件 dom4j是一个开源的java组件,可从http://sourceforge.net/pro ...

  4. Android中的三种XML解析方式

    在Android中提供了三种解析XML的方式:SAX(Simple API XML),DOM(Document Objrect Model),以及Android推荐的Pull解析方式.下面就对三种解析 ...

  5. XML文件的创建和解析笔记

    解析XML的四种方法 XML现在已经成为一种通用的数据交换格式,它的平台无关性,语言无关性,系统无关性,给数据集成与交互带来了极大的方便.对于XML本身的语法知识与技术细节,需要阅读相关的技术文献,这 ...

  6. XML的解析(DOM以及SAX方式)

    感谢http://blog.csdn.net/redarmy_chen/article/details/12951649(关于SAX解析)以及http://blog.csdn.net/zhangerq ...

  7. xml解析方式之JAXP解析入门

    XML解析 1 引入 xml文件除了给开发者看,更多的情况使用[程序读取xml文件]的内容.这叫做xml解析 2 XML解析方式(原理不同) DOM解析 SAX解析 3 XML解析工具 DOM解析原理 ...

  8. java xml解析方式(DOM、SAX、JDOM、DOM4J)

    XML值可扩展标记语言,是用来传输和存储数据的. XMl的特定: XMl文档必须包含根元素.该元素是所有其他元素的父元素.XML文档中的元素形成了一颗文档树,树中的每个元素都可存在子元素. 所有XML ...

  9. xml的解析与创建——bing到youdao导入文件的转换

    首先是为了解决一个问题:如何将必应单词本中记录的单词转入到有道词典中去.实际上,必应词典可以导出xml文件,但是该文件有道词典无法解析.这里涉及到xml的解析和创建了. 代码如下: import ja ...

随机推荐

  1. Dos窗口下中文乱码问题

    最近用Datax工具进行数据同步时,在DOS窗口下出现了中文乱码问题,导致一些错误只能到Log中查看,在网上找了一些方法,记录使用成功的方法. Dos命令:chcp 通过cmd进入Dos命令窗口,执行 ...

  2. linux系统下安装dubbo-admin

    1.在安装dubbo-admin之前确保你得linux服务器上已经成功安装了jdk,tomcat, 若还没安装jdk以及tomcat则参考我的上一篇文章"linux环境下安装jdk,tomc ...

  3. TCP协议三步挥手与四步挥手

    关于TCP协议 TCP(Transmission Control Protocol, 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议.与之对应的是UDP(User Datagram ...

  4. 关于synchronize与lock的区别

    参考文献:https://www.cnblogs.com/cloudblogs/p/6440160.html 一.synchronize修饰不同代码都是锁住了什么? 大家都知道synchronize可 ...

  5. 【Spark】【RDD】从HDFS创建RDD

    1.在HDFS根目录下创建目录(姓名学号) hdfs dfs -mkdir /zwj25 hdfs dfs -ls / 访问 http://[IP]:50070 2.上传本地文件到HDFS hdfs ...

  6. 编译工具ant部署

    目录 一.环境准备 二.安装 三.使用验证 一.环境准备 当前环境:centos7.3一台 软件版本:ant-1.9 部署目录:/usr/local/ant yum依赖 yum -y java-1.8 ...

  7. HyperSnips:VSCode上的自动补全神器

    发现一个小众但是巨好用的VSCode自动补全插件:HyperSnips. 作者显然受到了 这位小哥 的启发,将 Vim Ultisnips 的大部分功能搬到了VSCode上.并用 JavaScript ...

  8. Table.RowCount行列计数…Count(Power Query 之 M 语言)

    数据源: 任意五行两列 目标: 计算行数(包括空行) 操作过程: [转换]>[对行进行计数] M公式:  = Table.RowCount( 表 ) 扩展: 对表中列进行计数:= Table.C ...

  9. EhCache简单入门

    一 介绍 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认CacheProvider.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通 ...

  10. BUGKU web刷题记录

    web1 直接F12查看源码,得到flag. web2 直接输入验证码答案,长度被限制,修改可输入长度,提交后得到flag. web3 $what=$_GET['what']; echo $what; ...