描述:
sax解析,也叫事件解析,就是在解析數據的時候,是逐個向前解析的。
比如<name>abcefg</name>元素,首先解析到<name>,接着解析數據內容,當把內容解析到abc時,可能內存就要清理一次,然後再次調用characters(char[] ch, int start, int length)解析efg內容後,才繼續向下解析,當解析到</name>時說明是結束標記。
這個過程中,因爲各種原因比如:解析內容有\n 和 \t ,或者內存清理,都會導致同一元素內,多次調用characters。
解決辦法方法:
建議, 每次characters時調用sb.append(ch, start, length); 先臨時緩存起來,
在endElement的時候才調用String str = sb.toString() 。
// 元素的開始標籤
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
sb = new StringBuilder();
}
// 元素的內容
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
sb.append(new String(ch, start, length));
}
// 元素的結束標籤
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
String s = sb.toString();
}