注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

一线天色 天宇星辰

天下武功,唯快不破

 
 
 

日志

 
 

使用JAXB快速解析XML  

2011-07-21 20:55:46|  分类: 软件开发 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

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

 

 本文是否对你有所帮助?  

票数:20 投票时间:2011-07-21 20:55:46 到 2014-12-31 23:00:00

  •     19(95%)
  •     1(5%)
  •     0(0%)
查看参与情况
编辑投票|删除投票

最新投票|博友投票

      评论这张
     
    阅读(41178)| 评论(2)
    推荐 转载

    历史上的今天

    评论

    <#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
     
     
     
     
     
     
     
     
     
     
     
     
     
     

    页脚

    网易公司版权所有 ©1997-2017