package com.example.day12_saxparse;
import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
/**
* SAX dom相比:
*
* 有点:sax,pull,以事件触发解析的 dom和sax相比,还推荐sax,—pull
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = (TextView) findViewById(R.id.tv);
/**
* dom解析的步骤: 1.工厂 2.builder 3.解析
*
* sax解析步骤: 1.获取工厂类 2.解析者 3.解析---》流,handler
*/
SAXParserFactory factory = SAXParserFactory.newInstance();// sax解析工厂类的实例化
try {
SAXParser saxParser = factory.newSAXParser();// sax解析者实例化
// 获取流
InputStream inputStream = getAssets().open("source.xml");
// 实例化Handler
MyHandler myHandler = new MyHandler();
saxParser.parse(inputStream, myHandler);// DefaultHandler 默认的handler
// 获取list集合
ArrayList<Person> list = myHandler.getList();
// 展示数据
for (int i = 0; i < list.size(); i++) {
tv.append(list.get(i).getName() + list.get(i).getAge() + "\n");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
///
package com.example.day12_saxparse;
import java.util.ArrayList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* sax具体解析在handler里面进行
*
* @author Administrator
*
*/
public class MyHandler extends DefaultHandler {
// 需要重写5个方法
// 需要的变量
// 解析–》person–>list–>写个方法,返回list
Person person = null;
ArrayList list = null;
public ArrayList<Person> getList() {
return list;
}
// 标示变量
private String tagName;// 用来记录节点名字
// 开始读取文档
@Override
public void startDocument() throws SAXException {
// TODO Auto-generated method stub
super.startDocument();
// 实例化集合
list = new ArrayList<Person>();
}
// 结束文档
@Override
public void endDocument() throws SAXException {
// 可以在这里检验
for (int i = 0; i < list.size(); i++) {
System.out.println("检验集合"+list.get(i).getName());
}
}
// 开始读取元素---localName qName--->节点名字,attributes属性
@Override
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
// 记录节点名字
tagName = localName;
if (localName.equals("person")) {
// 需要实例化person
person = new Person();
// 设置属性,,,id
person.setId(Integer.parseInt(attributes.getValue("id")));
}
}
// 结束元素
@Override
public void endElement(String uri, String localName, String qName)
throws SAXException {
if (localName.equals("person")) {
// 放入集合
list.add(person);
System.out.println("是否放入--"+person.getName());
}
}
// 拼接字符串的方法---拼接内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
// System.out.println(“—-“+str);
// 根据节点名字赋值
if (tagName.equals(“name”)) {
String str = new String(ch, start, length);
person.setName(str);
System.out.println(“-Mingzi —”+person.getName());
} else if (tagName.equals(“age”)) {
String str = new String(ch, start, length);
person.setAge(str);
System.out.println(“nianling—-“+person.getAge());
}
}
}
/package com.example.day12_saxparse;
/**
* person封装类
* @author Administrator
*
*/
public class Person {
private String name;
private String age;
private int id;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Override
public String toString() {
return “Person [name=” + name + “, age=” + age + “, id=” + id + “]”;
}
}