码迷,mamicode.com
首页 > 移动开发 > 详细

安卓SAX解析XML出现二次解析-------矫正我们错误的认知

时间:2014-12-12 19:17:35      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:style   io   ar   color   os   sp   java   on   文件   

问题:一个标签解析了俩次

贴图为证吧:

bubuko.com,布布扣

targetPositionX0与targetPositionY0在XML文件中个数完全一致,但是解析时,Y0却经过了俩次解析。后面是字符数(不影响)。

网上关于如何用Sax解析XML到处都是,我在之前的文章中也提到过,但经过今天的问题,才知道,之前的方法不够完整。下面

就说下问题出现的原因吧。


Sax一次只能解析2k左右的文件,所以当标签中内容超过这个大小时,就要进行第二次解析。体现在characters()函数取标签中内

容,一次取不完,所以才出现上述问题。接下来再看下这个图

bubuko.com,布布扣

解释:dd是在endElement()函数中写的,我们可以看出当俩次characters执行完毕后,才继续向下面执行。


正确的解析方法:

 private StringBuilder sb = new StringBuilder();  
      
    @Override  
    public void characters(char[] ch, int start, int length)  
            throws SAXException {  
        super.characters(ch, start, length);  
          
        //将内容存到sb中
        sb.append(ch, start, length);  
    }  
  
    @Override  
    public void startDocument() throws SAXException {  
        super.startDocument();  
    }  
  
    @Override  
    public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {  
        super.startElement(uri, localName, qName, attributes);  
        //开始新标签先清空历史数据  
        sb.setLength(0);  
    }  
      
    @Override  
    public void endElement(String uri, String localName, String qName)  
            throws SAXException {  
        super.endElement(uri, localName, qName);  
          
        //(4)原来在characters中取值,现改在此取值  
        String value = sb.toString();  
          
       //做相应的处理操作
    }  
      
    @Override  
    public void endDocument() throws SAXException {  
        super.endDocument();  
    }  
}  


安卓SAX解析XML出现二次解析-------矫正我们错误的认知

标签:style   io   ar   color   os   sp   java   on   文件   

原文地址:http://blog.csdn.net/hemeng2009/article/details/41896383

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!