android xml解析

一、sax解析:

1,新建存放对象类

package com.example.xml_parser;

public class Person {

	Integer id;
	String name;
	short age;

	public Person() {
	}

	public Person(Integer id, String name, short age) {
		this.id = id;
		this.name = name;
		this.age = age;
	}

	public Person(String name, short age) {
		this.name = name;
		this.age = age;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}

	public short getAge() {
		return age;
	}
	public void setAge(short age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";
	}

}
2,继承DefaultHandler,重写方法

package com.example.xml_parser;

import java.util.ArrayList;
import java.util.List;

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

import android.util.Log;

public class SAXForHandler extends DefaultHandler {

	List<Person> persons;

	String perTag; // 纪录前一个标签的名称

	Person person;// 纪录当前Person

	public List<Person> getPersons() {
		return persons;
	}

	@Override
	public void startDocument() throws SAXException {
		persons = new ArrayList<Person>();
		Log.e("loge", "--startDocument--");
	}

	@Override
	public void endDocument() throws SAXException {

		Log.e("loge", "--endDocument--");

	}

	/**
	 * @namespaceUri 命名空间
	 * @localName 标签名称
	 * @qName 带命名空间的标签名,全名
	 * @attributes 存放该标签的所有属性
	 */
	@Override
	public void startElement(String namespaceUri, String localName,
			String qName, Attributes attributes) throws SAXException {

		if ("person".equals(localName)) {

			for (int i = 0; i < attributes.getLength(); i++) {

				Log.e("loge", "attributeName:" + attributes.getLocalName(i)
						+ "_attribute_Value:" + attributes.getValue(i));

				person = new Person();

				person.setId(Integer.valueOf(attributes.getValue(i)));

			}

		}

		perTag = localName;
		Log.e("loge", qName + "  --startElement--");
	}

	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {

		Log.e("loge", qName + "  --endElement--");

		if ("person".equals(localName)) {
			persons.add(person);
			person = null;
		}

		perTag = null;
	}

	/**
	 * @ch 当前读到的TextNode字节数组
	 * @start 字节开始的位置
	 * @length 当前TextNode长度
	 */
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {

		String data = new String(ch, start, length).trim();

		if (!"".equals(data.trim())) {

			Log.e("loge", "内容:" + data.trim());

		}

		if ("name".equals(perTag)) {
			person.setName(data);
		} else if ("age".equals(perTag)) {
			person.setAge(new Short(data));
		}

	}

}
3,加载获取xml文件

package com.example.xml_parser;

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;

public class XML_ParserActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_xml__parser);

		sax_xml();

	}

	public void sax_xml() {
		try {
			InputStream in = this.getClass().getClassLoader()
					.getResourceAsStream("zhxumao.xml");

			SAXForHandler handler = new SAXForHandler();

			SAXParserFactory spf = SAXParserFactory.newInstance();

			SAXParser saxParser = spf.newSAXParser();

			saxParser.parse(in, handler);

			List<Person> list = handler.getPersons();

			in.close();

			List<Person> persons = handler.getPersons();

			for (Person person : persons) {

				Log.e("loge", person.toString());

			}

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

二、DOM解析

package com.example.xml_parser;

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

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.util.Log;

public class DOMPersonService {

	public static List<Person> getPersons(InputStream inputStream)
			throws Exception {

		List<Person> persons = new ArrayList<Person>();

		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder = factory.newDocumentBuilder();
		Document document = builder.parse(inputStream);

		Element root = document.getDocumentElement();

		NodeList personNodes = root.getElementsByTagName("person");

		for (int i = 0; i < personNodes.getLength(); i++) {
			
			Element personElement = (Element) personNodes.item(i);

			int id = new Integer(personElement.getAttribute("id"));

			Person person = new Person();

			person.setId(id);

			NodeList childNodes = personElement.getChildNodes();

			for (int j = 0; j < childNodes.getLength(); j++) {

				if (childNodes.item(j).getNodeType() == Node.ELEMENT_NODE) {

					if ("name".equals(childNodes.item(j).getNodeName())) {
						String name = childNodes.item(j).getFirstChild()
								.getNodeValue();

						person.setName(name);

					} else if ("age".equals(childNodes.item(j).getNodeName())) {
						String age = childNodes.item(j).getFirstChild()
								.getNodeValue();

						person.setAge(new Short(age));
					}

				}
			}

			persons.add(person);

		}

		inputStream.close();

		return persons;
	}

}

package com.example.xml_parser;

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;

public class XML_ParserActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_xml__parser);

		dom_xml();

	}
	
	public void dom_xml() {
		
		try {
			
			InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("zhxumao.xml");
			
			List<Person > persons=DOMPersonService.getPersons(inputStream);
			
			for (Person person:persons) {
				Log.e("loge", person.toString());
			}
			
			inputStream.close();
			
		} catch (Exception e) {
		}
		
	}
	
	
}

三、pull解析

package com.example.xml_parser;

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

import org.xmlpull.v1.XmlPullParser;

import android.util.Xml;

public class PullPersonService {

	public static List<Person> getPersons(InputStream inputStream)
			throws Exception {

		Person person = null;

		List<Person> persons = null;

		XmlPullParser pullParser = Xml.newPullParser();

		pullParser.setInput(inputStream, "utf-8");

		int event = pullParser.getEventType();//第一个事件

		while (event != XmlPullParser.END_DOCUMENT) {

			switch (event) {
			case XmlPullParser.START_DOCUMENT:
				persons = new ArrayList<Person>();
				break;

			case XmlPullParser.START_TAG:
				if ("person".equals(pullParser.getName())) {
					int id = new Integer(pullParser.getAttributeValue(0));// 只有一个属性

					person = new Person();

					person.setId(id);
				}

				if (person != null) {
					if ("name".equals(pullParser.getName())) {
						person.setName(pullParser.nextText());
					}
					if ("age".equals(pullParser.getName())) {
						person.setAge(new Short(pullParser.nextText()));
					}
				}

				break;
			case XmlPullParser.END_TAG:
				if ("person".equals(pullParser.getName())) {
					persons.add(person);
					person = null;
				}
				break;
			}

			event=pullParser.next();
		}

		return persons;

	}
}

package com.example.xml_parser;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class XML_ParserActivity extends Activity {

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_xml__parser);
		
		pull_xml();
	}

	
	public void pull_xml() {
		
		try {

			InputStream inputStream=this.getClass().getClassLoader().getResourceAsStream("zhxumao.xml");
			
			List<Person > persons=PullPersonService.getPersons(inputStream);
			
			for (Person person:persons) {
				Log.e("loge", person.toString());
			}
			
			inputStream.close();
			
		} catch (Exception e) {
		}
	}


		
	
}

xml文件:

<?xml version="1.0" encoding="utf-8"?>    
<persons>
    <person id="23">
        <name>AAA</name>
        <age>21</age>
    </person>
     <person id="22">
        <name>BBB</name>
        <age>33</age>
    </person>
     <person id="21">
        <name>CCC</name>
        <age>76</age>
    </person>
</persons>







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值