Android Sax解析XML文档

yaku.xml

<?xml version='1.0' encoding='UTF-8'?>
<persons>
	<person id="22">
		<name>张定</name>
		<age>29</age>
	</person>
	<person id="23">
		<name>罗涛</name>
		<age>35</age>
	</person>
</persons>


实体类Person.java,主要用来设置获取XML文档中需要的数据

package com.yaku.saxXML;

public class Person {
	private int id;
	private String name;
	private int age;
	
	public Person() {}

	public Person(int id, String name, int age) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}
	
}


用Sax解析XML的SaxPersonService.java

package com.yaku.saxXML;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

public class SaxPersonService {
	public static List<Person> readXML(InputStream inStream) throws Exception {
		SAXParserFactory factory = SAXParserFactory.newInstance(); 
		SAXParser parse = factory.newSAXParser(); 
		XMLContentHandler handler = new XMLContentHandler();
		parse.parse(inStream, handler);
		inStream.close();
		return handler.getPerson();
	}
	@SuppressWarnings("unused")
	private static class XMLContentHandler extends DefaultHandler{
		private List<Person> person;
		private Person ps;
		private String flag = null;
		/**
		 * 读取XML文档头部
		 * @throws SAXException
		 */
		public void startDocument() throws SAXException {
			person = new ArrayList<Person>();
		}
		
		/**
		 * 开始标签
		 */
		public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
			if("person".equals(localName)){
				ps = new Person();
				ps.setId(Integer.parseInt(attributes.getValue("id")));
			}
			flag = localName;
		}
		
		/**
		 * 文本内容
		 */
		public void characters(char[] ch, int start, int length) throws SAXException {
			if(flag!=null){
				String date = new String(ch,start,length);
				if("name".equals(flag)){
					ps.setName(date);
				}else if("age".equals(flag)){
					ps.setAge(Integer.parseInt(date));
				}
				
			}
		}

		/**
		 * 结束标签
		 */
		public void endElement(String uri, String localName, String qName) throws SAXException {
			if("name".equals(localName) || "age".equals(localName)){
				flag = null;
			}
			if("person".equals(localName)){
				person.add(ps);
				ps = null;
			}
		}
		
		public List<Person> getPerson() {
			return person;
		}

		public void setPerson(List<Person> person) {
			this.person = person;
		}
	}
}

测试类SaxPersonServiceTest.java

package com.yaku.android;

import java.io.InputStream;
import java.util.List;

import com.yaku.saxXML.Person;
import com.yaku.saxXML.SaxPersonService;

import android.test.AndroidTestCase;

public class SaxPersonServiceTest extends AndroidTestCase {
	public void testReadXML() throws Exception{
		InputStream inStream = SaxPersonService.class.getClassLoader().getResourceAsStream("yaku.xml");
		SaxPersonService server = new SaxPersonService();
		List<Person> person = server.readXML(inStream);
		for(Person ps : person){
			System.out.println(ps.toString());
		}
	}
}


在AndroidManifest.xml文件中配置单元测试环境

在<application>标签下面加入:

<uses-library android:name="android.test.runner" />

在根标签下加入:

<instrumentation android:targetPackage="com.yaku.android" 
    	android:name="android.test.InstrumentationTestRunner" 
    	android:label="Test Unit Tests"></instrumentation>


其中android:targetPackage为测试类所在包名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值