文章21 | 阅读 8253 | 点赞0
摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录
JAXB 支持两种方式的XML与Java Bean 相互转化,上一节介绍的是基于注解的方式,这节主要关于另一种方式 xjc
。xjc
需要使用到 schema 文件,这一节的主要任务是将 XML 文件(以.xml结尾)转化为 schema 文件(以.xsd结尾)。
如果你已经有了生成好的 schema 文件,可以直接忽略这一小节。
演示基于 Windows 7 + jdk 8。
有很多种方式可以获取到 schema 文件,这里我采用的是 Trang
。可以在 Trang 网站 找到最新版的安装包,不过其文件存放在Google,需要翻墙下载,已经有人将整个压缩包上传到CSDN。
Trang 可以对多种 schema 语言转换为XML,目前已支持 XML 语法
,XML 1.0 DTD
,W3C XML Schema
等。Trang 为创造易于阅读的 schema 而存在,不过已经停止维护。
将下载的trang(xml转xds).zip
(约1M)文件解压,得到trang.jar
。我将其放置于电脑的 E:\JAXB
,将需要转换的XML文件放置于同一目录下。
按住Shift
键,单机鼠标右键,在弹出的对话框中,选择在此处打开命令窗口
,如下图:
首先测试是否安装好jdk,java -version
顺利输出,说明安装正确。
E:\JAXB>java -version
java version "1.8.0_92"
Java(TM) SE Runtime Environment (build 1.8.0_92-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode)
使用命令 java -jar trang.jar book.xml book.xsd
,没有错误输出,说明一切顺利。
E:\JAXB>java -jar trang.jar book.xml book.xsd
E:\JAXB>
使用的命令不算复杂,常规的 java 命令 java -jar trang.jar
,两个参数分别指定了输入xxx.xml
和输出xxx.xsd
。
可以在相同的目录下看到生成的文件。
Trang的完整语法支持:
java -jar trang.jar [-C catalogFileOrUri] [-I rng|rnc|dtd|xml] [-O rng|rnc|dtd|xsd] [-i input-param] [-o output-param] inputFileOrUri ... outputFile
encoding=ISO-8859-1
表示使用指定的字符编码ISO-8859-1
,而不是文件头<?xml version="1.0" encoding="GB2312" standalone="yes"?>
中指定的编码。indent=4
,表示每一个层级缩进的空格数。指定输入文件格式:java -jar trang.jar -I xml book.xml book.xsd
指定输入文件编码:java -jar trang.jar -i encoding=UTF-8 book.xml book.xsd
指定输出的层级空格数:java -jar trang.jar -o indent=10 book.xml book.xsd
多个输入同时转换为一个输出:java -jar trang.jar book.xml student.xml union.xsd
这里我使用的book.xml
是一个简单的XML,只有少量的元素,且结构单一。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<book>
<id>00011</id>
<name>Math</name>
<price>25.0</price>
</book>
生成的 schema 文件如下,相对于原始文件,庞大不少:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element ref="id"/>
<xs:element ref="name"/>
<xs:element ref="price"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="id" type="xs:integer"/>
<xs:element name="name" type="xs:NCName"/>
<xs:element name="price" type="xs:decimal"/>
</xs:schema>
如果对稍微复杂点的XML文件books.xml
转换:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<books>
<book id="00011">
<name>Math</name>
<price>25.0</price>
</book>
<book id="0002s1">
<name>English</name>
<price>28.0</price>
</book>
</books>
使用命令E:\JAXB>java -jar trang.jar books.xml books.xsd
转化以后,得到的 schema 文件更为复杂。
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" ref="book"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element ref="name"/>
<xs:element ref="price"/>
</xs:sequence>
<xs:attribute name="id" use="required" type="xs:NMTOKEN"/>
</xs:complexType>
</xs:element>
<xs:element name="name" type="xs:NCName"/>
<xs:element name="price" type="xs:decimal"/>
</xs:schema>
在得到了 schema 文件后,就可以使用 xjc
工具来生成 Java bean 了,下一节来聊一聊如何将schema 文件转化为 Java bean。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://jiangchao.blog.csdn.net/article/details/82081831
内容来源于网络,如有侵权,请联系作者删除!