Android解析自定义xml文件--Sax解析xml文件,测试demo(方案二)

转载请注明出处: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<StringObject> 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<StringObject> sAll = new ArrayList<StringObject>();
	
	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<StringObject> 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文件:

<?xml version="1.0" encoding="utf-8"?>

<test_config version="1">
    <test_item item_name="item1">我们</test_item>
    <test_item item_name="item2">都是</test_item>
    <test_folder folder_name="folder1">好</test_folder>
    <test_folder folder_name="folder2">孩子</test_folder>
</test_config>

测试结果:

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=孩子]


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hailushijie

您的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值