转载请注明出处:http://blog.csdn.net/droyon/article/details/9346657
Sax解析xml
以下是测试Demo
运行程序类
public class TestApplication extends Application{
private static final String LOG_TAG = "TestApplication";
@Override
public void onCreate() {
super.onCreate();
SaxForXml handler = null;
try {
String readXmlFile = "test_config.xml";
SAXParserFactory factory = SAXParserFactory.newInstance();//第一步
SAXParser parse = factory.newSAXParser();//第二步
XMLReader reader = parse.getXMLReader();//第三步
handler = new SaxForXml();
reader.setContentHandler(handler);//第四步
//第一种获得InputSource的方式
InputSource in = new InputSource(getResources().openRawResource(R.raw.test_config));
//AssetManager assetM = getResources().getAssets();//第二种获得InputSource
InputSource in = new InputSource(assetM.open("test_config1.xml"));//第五步
reader.parse(in);//第六步
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
ArrayList data = handler.getAllData();
for(StringObject stringObject : data){
Log.d(LOG_TAG, stringObject+"");
}
}
}
解析类:
package com.example.androidtest;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
import android.util.Log;
public class SaxForXml extends DefaultHandler{
private static final String LOG_TAG = "SaxForXml";
private static final String sItem = "item_name";
private static final String sFolder = "folder_name";
private static final String sTagItem = "test_item";
private static final String sTagFolder = "test_folder";
private static ArrayList sAll = new ArrayList();
private static StringObject sStringObject;
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
super.characters(ch, start, length);
String temp = new String(ch, start, length);
Log.d(LOG_TAG, "characters temp is:"+temp+"..start is:"+start+"..length is:"+length);
if(sStringObject == null){
return;
}
sStringObject.setS4(temp);
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
Log.d(LOG_TAG, "endDocument");
}
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
super.endElement(uri, localName, qName);
Log.d(LOG_TAG, "endElement uri is:"+uri+"..localName is:"+localName+"..qName is:"+qName);
if(sStringObject == null){
return;
}
sAll.add(sStringObject);
sStringObject = null;
}
@Override
public void startDocument() throws SAXException {
super.startDocument();
Log.d(LOG_TAG, "startDocument");
}
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
super.startElement(uri, localName, qName, attributes);
Log.d(LOG_TAG, "startElement uri is:"+uri+"..localName is:"+localName+".. qName is:"+qName+".. attributes is:"+attributes);
if(!sTagItem.equals(localName)&&!sTagFolder.equals(localName)){
return;
}
sStringObject = new StringObject();
sStringObject.setS1(localName);
String string2 = attributes.getLocalName(0);
String string3 = attributes.getValue(0);
Log.d(LOG_TAG, "startElemement string2 is:"+string2+"..String3 is:"+string3);
sStringObject.setS2(string2);
sStringObject.setS3(string3);
}
public static ArrayList getAllData(){
return sAll;
}
class StringObject{
String s1;
String s2;
String s3;
String s4;
public void setS1(String s1) {
this.s1 = s1;
}
public void setS2(String s2) {
this.s2 = s2;
}
public void setS3(String s3) {
this.s3 = s3;
}
public void setS4(String s4) {
this.s4 = s4;
}
@Override
public String toString() {
return "StringObject [s1=" + s1 + ", s2=" + s2 + ", s3=" + s3
+ ", s4=" + s4 + "]";
}
}
}
xml文件:
我们
都是
好
孩子
测试结果:
StringObject [s1=test_item, s2=item_name, s3=item1, s4=我们]
StringObject [s1=test_item, s2=item_name, s3=item2, s4=都是]
StringObject [s1=test_folder, s2=folder_name, s3=folder1, s4=好]
StringObject [s1=test_folder, s2=folder_name, s3=folder2, s4=孩子]