Android 采用SAX解析XML内容 【学习记录】

测试所用的xml文件
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<persons>
	<person id="24">
		<name>Danny</name>
		<age>24</age>
	</person>
	<person id="23">
		<name>Kiki</name>
		<age>23</age>
	</person>
</persons>

Java 代码文件
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;

import com.android.mldn.domain.Person;

/**
 * 采用SAX解析XML内容
 * @author Mik
 *
 */

public class SAXPersonService {
	public List<Person> getPersons(InputStream inStream)throws Throwable{
		//创建SAXParserFactory 实例
		SAXParserFactory factory = SAXParserFactory.newInstance();
		//得到  SAXParser 的一个解释器
		SAXParser parser = factory.newSAXParser();
		//实例化一个 PersonParser 该类实现了ContentHandler接口
		PersonParser personParser = new PersonParser();
		
		parser.parse(inStream, personParser);
		
		inStream.close();
		return personParser.getPersons();
		
	}
	
	//该类负责解析 xml 数据
	private final class PersonParser extends DefaultHandler{
		private List<Person> persons = null;
		//用来记录元素节点的 名称
		private String tag = null;
		private Person person = null;
		
		public List<Person> getPersons(){
			return persons;
		}
		
		@Override
		public void characters(char[] ch, int start, int length)
				throws SAXException {
			if (tag!=null) {
				//获取文本节点的数据
				String data = new String(ch, start, length);
				if ("name".equals(tag)) {
					person.setName(data);
				}else if ("age".equals(tag)) {
					person.setAge(new Short(data));
				}
			}
		}

		@Override
		public void endElement(String uri, String localName, String qName)
				throws SAXException {
			if ("person".equals(localName)) {
				//一组读取完毕就添加到person 对象当中
				persons.add(person);
				person = null;
			}
			//读到 节点末尾
			tag = null;
		}

		@Override
		public void startDocument() throws SAXException {
			persons = new ArrayList<Person>();
		}

		@Override
		public void startElement(String uri, String localName, String qName,
				Attributes attributes) throws SAXException {
			if ("person".equals(localName)) {
				//创建 person 对象
				person = new Person();
				person.setId(new Integer(attributes.getValue(0)));
			}	
			//记录元素节点的 名称
			tag = localName;
		}
		
	}
}


你可能感兴趣的:(android,xml,sax)