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

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

贴图为证吧:


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

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

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


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

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


解释: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();  
    }  
}  


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。