使用JAXB快速解析XML
项目开发中,经常要用到生成XML和解析XML,其实JDK已经为我们写好了一些处理XML的类,就在javax.xml这个包下面,具体怎么用的呢?
我们今天先来看看JAXB如何快速简单的解析XML。
首先我们需要定义XML的格式,JAXB可以通过xsd文件来定义对应的XML,如我做了一个异常处理类,配置如下
<?xml?version="1.0"?encoding="UTF-8"?>
<schema?xmlns="http://www.w3.org/2001/XMLSchema"xmlns:tns="http://www.kedou.com/exceptionProcessers/"
????targetNamespace="http://www.kedou.com/exceptionProcessers/">
?
????<element?name="exceptionProcessers">
???????<complexType>
???????????<sequence>
??????????????<element?ref="tns:excludes"?minOccurs="0"?maxOccurs="1"></element>
??????????????<element?ref="tns:processer"?minOccurs="0"?maxOccurs="unbounded"></element>
???????????</sequence>
???????</complexType>
????</element>
???
????<element?name="excludes">
???????<complexType>
???????????<sequence>
??????????????<element?ref="tns:pattern"?minOccurs="1"?maxOccurs="unbounded"></element>
???????????</sequence>
???????</complexType>
????</element>
???
????<element?name="pattern"?type="string">
????</element>
???
????<element?name="processer">
???????<complexType>
???????????<sequence>
??????????????<element?ref="tns:pattern"?minOccurs="1"?maxOccurs="unbounded"></element>
???????????</sequence>
???????????<attribute?name="id"?type="string"?use="required"></attribute>
???????????<attribute?name="beanName"?type="string"></attribute>
???????????<attribute?name="className"?type="string"></attribute>
???????</complexType>
????</element>
</schema>
具体的细节就不用说了吧?大家应该一看就明白的
然后是生成对应的bean对象,因为JAXB本来就是将xml直接转化为对象,然后我们就可以直接得到XML中的数据了。JDK为我们提供了一种很简单的生成bean方法,打开dos窗口,输入命令
在命令行下执行:
Xjc?–d??java类的存放路径?–p?类的包名?xsd文件名
对应就可以生成对应的Java对象
使用的时候就更简单了,直接调用静态类即可获取!
代码如下:
????private?static?ExceptionProcessers?processersRoot;
?
????static{
???????JAXBContext context;
???????try?{
???????????context = JAXBContext.newInstance(ExceptionProcessers.class);
???????????Unmarshaller shaller = context.createUnmarshaller();
???????????processersRoot?= (ExceptionProcessers) shaller.unmarshal(newFile(getClassPath()+"exceprionProcessers.xml"));
???????}?catch?(JAXBException e) {
???????????e.printStackTrace();
???????}
????}
是不是很简单的呢?还不赶快来试试……
附表:JAXB中XML数据类型和Java数据类型的映射
XML Schema类型
Java数据类型
xsd:string
java.lang.String
xsd:positiveInteger
java.math.BigInteger
xsd:int
int
xsd:long
long
xsd:short
short
xsd:decimal
java.math.BigDecimal
xsd:float
float
xsd:double
double
xsd:boolean
boolean
xsd:byte
byte
xsd:QName
javax.xml.namespace.QName
xsd:dateTime
javax.xml.datatype.XMLGregorianCalendar
xsd:base64Binary
byte[]
xsd:hexBinary
byte[]
xsd:unsignedInt
long
xsd:unsignedShort
int
xsd:unsignedByte
short
xsd:time
javax.xml.datatype.XMLGregorianCalendar
xsd:date
javax.xml.datatype.XMLGregorianCalendar
xsd:g
javax.xml.datatype.XMLGregorianCalendar
xsd:anySimpleType
java.lang.Object
xsd:anySimpleType
java.lang.String
xsd:duration
javax.xml.datatype.Duration
xsd:NOTATION
javax.xml.namespace.QName
?