SAX解析xml的characters方法被多次調用

描述:

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

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章