您的位置:首页 > 其它

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

2014-12-12 16:58 302 查看
问题:一个标签解析了俩次

贴图为证吧:



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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐