首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > XML SOAP >

施用JAXB快速解析XML

2012-10-28 
使用JAXB快速解析XML项目开发中,经常要用到生成XML和解析XML,其实JDK已经为我们写好了一些处理XML的类,就

使用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

?

热点排行