一、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>