XML大文件解析[分享]

2009-03-18日记:ycl
今天我研究的主题是stax.[本人吐血推荐使用stax解析xml]
昨天研究的是sax一种推式解析方法,采用事件驱动的方式进行大型xml文件的解析.
其有两个方法如下:
   startElement(String namespaceURI, String localName, String qName,
                        Attributes atts)throws SAXException
   在开始处理元素的时候可以根据namespaceURI,localName,qName,atts来处理一些逻辑.
   endElement(String namespaceURI, String localName, String qName)
                        throws SAXException
   在处理元素结束的时候可以根据namespaceURI,localName,qName来处理一些逻辑.
   characters(char[] ch, int start, int length)
   处理元素的内容.

   优点:采用事件驱动的模式进行xml的读取,只处理需要处理的元素.
   缺点:其读取方式是推的,也就是不知道已经读过的东西,也不知道将要读什么.所以如果是采用sax
        来读取大型xml一段内容的时候,必须自己定义逻辑来解析.完全破坏了xml的dom结构.

   今天研究的是stax一种拉式解析方法,也是采用事件驱动的方式进行解析.
   其实用性很简单,不用像sax那样必须继承一个handler.
   InputStream input=new FileInputStream(new File("D://cata.xml"));
   XMLStreamReader xmlStreamReader =inputFactory.createXMLStreamReader(input);
   这样就已经初始化好了一个xml的流读取.
   然后判断xmlStreamReader.hasNext()是否有下一个结点
   然后循环xmlStreamReader.next()读取下一个结点.
   (其原理和sax相似,都是以元素为单位进行读取.)
   然后处理XMLStreamReader的以下事件.在需要处理的事件中写自己的逻辑,如果找到自己的东西了,那就返回
                                //START_DOCUMENT :一个文档的开始
                                //START_ELEMENT  :一个元素的开始
                                //ATTRIBUTE      :一个元素属性子
                                //NAMESPACE      :一个命名空间声明
                                //CHARACTERS     :字符可以是文本,或是一个空格
                                //COMMENT        :一个注释
                                //SPACE          :可忽略的空格
                                //PROCESSING_INSTRUCTION  :处理指令
                                //DTD                     :一个DTD
                                //ENTITY_REFERENCE        :一个实体参考
                                //CDATA                   :Cdata节
                                //END_ELEMENT             :结束元素
                                //END_DOCUMENT            :结束文档
                                //ENTITY_DECLARATION      :一个实体声明
                                //NOTATION_DECLARATION    :一个标志声明
   之所以称stax为拉式,那是因为sax只有推,却无法停止解析,直到文档解析结束.故名思意,stax为拉,是因为      其能能在适当的时候刹车.
   其优缺点和sax一样,只是多了一个功能,那就是拉,还有就是其控制比较简单,而且Axis2等主流webservice都     采用stax.因为一个请求过去,可能给你返回很多信息,而我们要的只是仅仅一小部分.
  
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值