Android之sax解析XML文档

原理

<?xml version="1.0" encoding="UTF-8"?>

<persons> --》元素节点
    <person id=" 23"> (这里的空格)与 " 23" liming 30 都是文本节点
        <name> liming</name>
        <age> 30</age>
    </person>
    <person id="20">
        <name>lixiangmei</name>
        <age>25</age>
    </person>

</persons>

在SAXParse.java中

public class SAXParse
{
    public List<Person> getPersons(InputStream inputStream) throws Throwable
    {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        SAXParser parser = factory.newSAXParser();
        PersonParser personParser = new PersonParser();
        parser.parse(inputStream, personParser);
        inputStream.close();
        return personParser.getPersons();
    }

    @SuppressLint("UseValueOf")
    private final class PersonParser extends DefaultHandler
    {
        private Person person;
        private List<Person> persons;
        private String tag;

        public List<Person> getPersons()
        {
            return persons;
        }
        
        @Override
        public void characters(char[] ch, int start, int length)
                throws SAXException
        {
            if (tag != null)
            {
                String data = new String(ch, start, length);
                if (tag.equals("name"))
                {
                    person.setName(data);
                } else if (tag.equals("age"))
                {
                    person.setAge(new Short(data));
                }
            }
        }

        @Override
        public void endDocument() throws SAXException
        {
            // TODO Auto-generated method stub
            super.endDocument();
        }

        @Override
        public void endElement(String uri, String localName, String qName)
                throws SAXException
        {    
            if(localName.equals("person"))
            {
                persons.add(person);
                person=null;
            }
            tag=null;
        }

        @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 (localName.equals("person"))
            {
                person = new Person();
                person.setId(new Integer(attributes.getValue(0)));
            }
            tag = localName;
        }

    }

}

在单元测试中

private static final String TAG = "XMLTest";

    public void testSAX() throws Throwable
    {
        SAXParse saxParse = new SAXParse();
        InputStream inputStream = getClass().getClassLoader()
                .getResourceAsStream("myxml.xml");
        List<Person> persons = saxParse.getPersons(inputStream);
        for (Person person : persons)
        {
            Log.i(TAG, person.toString());
        }
    }


你可能感兴趣的:(Android之sax解析XML文档)