1. Analysis of sax:
package com.xml.demo;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import javax.xml.parsers.SAXParser;import javax.xml.parsers.SAXParserFactory;import org.xml.sax.Attributes;import org.xml.sax.SAXException;import org.xml.sax.helpers.DefaultHandler;public class SAXParserXML {public List<Person> getPersons(InputStream inStream) throws Throwable {SAXParserFactory factory = SAXParserFactory.newInstance();SAXParser saxParser = factory.newSAXParser();MyHandler myHandler = new MyHandler();saxParser.parse(inStream, myHandler);List<Person> persons = myHandler.getPersons();inStream.close();return persons;}private final class MyHandler extends DefaultHandler {private List<Person> persons;private Person person;private String tagElement;public List<Person> getPersons() {return persons;}@Overridepublic void startDocument() throws SAXException {persons = new ArrayList<Person>();}@Overridepublic 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)));}tagElement = localName;}@Overridepublic void characters(char[] ch, int start, int length) throws SAXException {if (tagElement != null) {String tmp = new String(ch, start, length);if ("name".equals(tagElement)) {person.setName(tmp);} else if ("age".equals(tagElement)) {person.setAge(Integer.valueOf(tmp));}}}@Overridepublic void endElement(String uri, String localName, String qName) throws SAXException {if ("person".equals(localName)) {persons.add(person);person = null;}tagElement = null;}}}
<? XML version = "1.0" encoding = "UTF-8"?> <Persons> <person id = "001"> <Name> Zhang Yi </Name> <age> 11 </age> </person> <person id = "002"> <name> Zhang 'er </Name> <age> 12 </age> </person> <person id = "003"> <Name> Zhang San </Name> <age> 13 </age> </person> <person id = "004"> <Name> Zhang Si </Name> <age> 14 </age> </person> <person id =" 005 "> <Name> zhangwu </Name> <age> 15 </age> </person> </persons>
Package COM. XML. demo; import Java. io. inputstream; import Java. util. list; import android. test. androidtestcase; import android. util. log; public class xmltest extends androidtestcase {/*** test the sax parsing service class * @ throws throwable */Public void testsax () throws throwable {saxparserxml msaxparserxml = new saxparserxml (); inputstream instream = This. getclass (). getclassloader (). getresourceasstream ("persons. XML "); List <person> Persons = msaxparserxml. getpersons (instream); For (person: Persons) {log. D (appconstant. tag, person. tostring ());}}}
Ii. Pull Parsing
Package COM. XML. demo; import Java. io. inputstream; import Java. util. arraylist; import Java. util. list; import Org. xmlpull. v1.xmlpullparser; import android. util. XML; public class pullparserxml {Private Static final string encoding = "UTF-8"; public list <person> getpersons (inputstream instream) throws throwable {list <person> Persons = NULL; person = NULL; xmlpullparser pullparser = xml. newpullparser (); Pu Llparser. setinput (instream, encoding); // generate the first event int eventtype = pullparser. geteventtype (); While (eventtype! = Xmlpullparser. end_document) {Switch (eventtype) {Case xmlpullparser. start_document: Persons = new arraylist <person> (); break; Case xmlpullparser. start_tag: String tagname = pullparser. getname (); If ("person ". equals (tagname) {person = new person (); person. setid (integer. valueof (pullparser. getattributevalue (0);} If (person! = NULL) {If ("name ". equals (tagname) {// gets the value of person that the parser currently points to the next text node of the element. setname (pullparser. nexttext ();} If ("age ". equals (tagname) {person. setage (integer. valueof (pullparser. nexttext () ;}} break; Case xmlpullparser. end_tag: If ("person ". equals (pullparser. getname () {persons. add (person); person = NULL;} break;} // continue to generate event eventtype = pullparser. next () ;}return persons ;}}
/*** Test the pull parsing service class * @ throws throwable */Public void testpull () throws throwable {pullparserxml pull = new pullparserxml (); inputstream instream = This. getclass (). getclassloader (). getresourceasstream ("persons. XML "); List <person> Persons = pull. getpersons (instream); For (person: Persons) {log. D (appconstant. tag, person. tostring ());}}
Iii. Dom Parsing
In Android, Dom is not recommended for parsing XML, so no code is pasted here.