一、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; } @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))); } tagElement = localName; } @Override public 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)); } } } @Override public 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>张一</name> <age>11</age> </person> <person id="002"> <name>张二</name> <age>12</age> </person> <person id="003"> <name>张三</name> <age>13</age> </person> <person id="004"> <name>张四</name> <age>14</age> </person> <person id="005"> <name>张五</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 { /** * 测试sax解析业务类 * @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 person : persons){ Log.d(AppConstant.TAG, person.toString()); } } }
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 person = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(inStream, ENCODING); // 产生第一个事件 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)) { // 获取解析器当前指向元素的下一个文本节点的值 person.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; } // 继续产生事件 eventType = pullParser.next(); } return persons; } }
/** * 测试Pull解析业务类 * @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 person : persons){ Log.d(AppConstant.TAG, person.toString()); } }
三、DOM解析
Android中不推荐使用DOM来解析xml,在此就不贴代码了。