`
习惯在马桶上思考
  • 浏览: 112920 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

使用JAXB快速解析XML

    博客分类:
  • JAVA
 
阅读更多

项目开发中,经常要用到生成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();

       }

    }

是不是很简单的呢?还不赶快来试试……

附表:JAXBXML数据类型和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

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics