Android--用SAX解析xml文件

主运行类

package com.mrzhu.test31;

import java.io.InputStream;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

public class SAXParse extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
    
    //按钮事件
    public void sax(View v){
    	startSax();
    }

	private void startSax() {
		//获得解析器工厂
		SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
		try {
			//获得解析器
			SAXParser saxParser = saxParserFactory.newSAXParser();
			//装载要解析的xml文件
			InputStream inputStream = getAssets().open("person.xml");
			SAXHandler saxHandler = new SAXHandler();
			//调用parse方法开始解析
			saxParser.parse(inputStream, saxHandler);
			//取得解析后的结果
			List<Person> list = saxHandler.getList();
			for (Person person : list) {
				Log.i("System.out", person.toString());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


 

 

 

SAXHandler类:

package com.mrzhu.test31;

import java.util.ArrayList;
import java.util.List;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SAXHandler extends DefaultHandler {
	private List<Person> list;
	private Person currPerson;
	private String tag;
	
	public List<Person> getList() {
		return list;
	}

	/**
	 * 解析到开始标记时执行该方法
	 */
	@Override
	public void startDocument() throws SAXException {
		super.startDocument();
		//实例化一个list用于存储解析出来的对象
		list = new ArrayList<Person>();
	}

	/**
	 * 解析到开始元素时执行该方法
	 */
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		super.startElement(uri, localName, qName, attributes);
		//当开始标签为person时实例化一个Person对象
		if("person".trim().equalsIgnoreCase(qName)){
			currPerson = new Person();
			//取得属性值
			currPerson.setPersonid(attributes.getValue("personId"));
		}
		//将解析到的标签赋值给tag
		tag = qName;
	}


	/**
	 * 当解析到内容时执行该方法
	 */
	@Override
	public void characters(char[] ch, int start, int length)
	throws SAXException {
		super.characters(ch, start, length);
		if(tag != null){
			//判断解析出来的标签名,则取出对应值并设置给Person对象 
			if("name".trim().equalsIgnoreCase(tag)){
				currPerson.setName(new String(ch, start, length));
			}else if("address".trim().equalsIgnoreCase(tag)){
				currPerson.setAddress(new String(ch, start, length));
			}else if("tel".trim().equalsIgnoreCase(tag)){
				currPerson.setTel(new String(ch, start, length));
			}else if("fax".trim().equalsIgnoreCase(tag)){
				currPerson.setFax(new String(ch, start, length));
			}else if("email".trim().equalsIgnoreCase(tag)){
				currPerson.setEmail(new String(ch, start, length));
			}
		}
	}

	/**
	 * 当解析到结束标签时执行该方法
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
	throws SAXException {
		super.endElement(uri, localName, qName);
		//若标签名为person,则将Person对象加到list集合中
		if("person".trim().equalsIgnoreCase(qName)){
			list.add(currPerson);
		}
		tag = null;
	}

	/**
	 * 当解析到结束文档标签时执行该方法
	 */
	@Override
	public void endDocument() throws SAXException {
		super.endDocument();
		
	}
}


 

 

Person类:

 

package com.mrzhu.test31;

public class Person {
	private String personid;
	private String name;
	private String address;
	private String tel;
	private String fax;
	private String email;
	public String getPersonid() {
		return personid;
	}
	public void setPersonid(String personid) {
		this.personid = personid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getFax() {
		return fax;
	}
	public void setFax(String fax) {
		this.fax = fax;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	@Override
	public String toString() {
		return "Person [name=" + name + ", address=" + address + ", tel=" + tel
				+ ", fax=" + fax + ", email=" + email + "]";
	}
	
}


 

 

person.xml文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<people>
	<person personid="E01">
		<name>Tony Blair</name>
		<address>10 Downing Street, London, UK</address>
		<tel>(061) 98765</tel>
		<fax>(061) 98765</fax>
		<email>[email protected]</email>
	</person>
	<person personid="E02">
		<name>Bill Clinton</name>
		<address>White House, USA</address>
		<tel>(001) 6400 98765</tel>
		<fax>(001) 6400 98765</fax>
		<email>[email protected]</email>
	</person>
	<person personid="E03">
		<name>Tom Cruise</name>
		<address>57 Jumbo Street, New York, USA</address>
		<tel>(001) 4500 67859</tel>
		<fax>(001) 4500 67859</fax>
		<email>[email protected]</email>
	</person>
	<person personid="E04">
		<name>Linda Goodman</name>
		<address>78 Crax Lane, London, UK</address>
		<tel>(061) 54 56789</tel>
		<fax>(061) 54 56789</fax>
		<email>[email protected]</email>
	</person>
</people>


 

 

main.xml文件:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <Button
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="sax"
        android:text="@string/btn_sax" />

</LinearLayout>


 

你可能感兴趣的:(android,android,android,sax,sax,DefaultHandler,XML文件解析,XML文件解析)