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