sax解析

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 + “]”;
}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值