Android 使用SAX解析XML文件

来源:互联网 发布:海康威视网络摄像机ip 编辑:程序博客网 时间:2024/05/21 04:00

Android 使用SAX解析XML文件

SAX, Simple API for XML,采用事件驱动。当读取到相应内容时便会调用相应的回调函数(方法),这些方法定义在ContentHandler接口中。

1. 以解析该xml文件为例:
<?xml version="1.0" encoding="UTF-8"?><persons>    <person id="23">        <name>大明</name>        <age>30</age>    </person>    <person id="20">        <name>小明</name>        <age>25</age>    </person></persons>
2.新建JavaBean,用于存放xml文件中的person数据:
public class Person {    private int id;    private String name;    private short age;    public int getId() {        return id;    }    public void setId(int 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 + "]";    }}
3.新建业务操作类:
public class SAXPersonService {    public List<Person> getPersons(InputStream inputStream) throws Exception {        SAXParserFactory factory = SAXParserFactory.newInstance();        SAXParser parser = factory.newSAXParser();        PersonParserHandler handler = new PersonParserHandler();        parser.parse(inputStream, handler);        inputStream.close();        return handler.getPersons();    }    private final class PersonParserHandler extends DefaultHandler {        private List<Person> persons = null;        private Person person;        private String tag = null;        public List<Person> getPersons() {            return persons;        }        @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 = new Person();                person.setId(new Integer(attributes.getValue(0)));            }            tag = localName;        }         @Override        public void endElement(String uri, String localName, String qName)                throws SAXException {            if("person".equals(localName)) {                persons.add(person);                person = null;            }            tag = null;        }        @Override        public void characters(char[] ch, int start, int length)                throws SAXException {            if(tag != null) {                if("name".equals(tag)) {                    person.setName(new String(ch, 0, length));//获取name中文本节点数据                }else if("age".equals(tag)) {                    person.setAge(new Short(new String(ch, 0, length)));//获取age中文本节点数据                }            }        }    }}
4.新建单元测试类:
public class SAXPersonServiceTest extends AndroidTestCase {    public void testGetPersons() throws Exception{        SAXPersonService service = new SAXPersonService();        InputStream inputStream = getClass().getClassLoader().getResourceAsStream("test.xml");        List<Person> persons = service.getPersons(inputStream);        for(Person person : persons) {            Log.i("TAG", person.toString());        }    }}
0 0
原创粉丝点击