除了可以使用 SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件。
Pull解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。
Pull解析器的源码及文档下载网址:http://www.xmlpull.org/
person.xml文件:
<?xml version="1.0" encoding="utf-8"?> <persons> <person id="21"> <name>hanmeimei</name> <age>23</age> </person> <person id="27"> <name>lilei</name> <age>25</age> </person> </persons>
/** * 通过Pull解析器来解析xml文件 */ public class PullPersonService { public static List<Person> getPersons(InputStream inStream) throws Exception { List<Person> persons = null; Person person = null; // 定义XmlPullParser XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); // 另外一种定义XmlPullParser的方法 // XmlPullParser parser = Xml.newPullParser() // 传入一个InputStream parser.setInput(inStream,"UTF-8"); // 取得当前解析器的参数 int event = parser.getEventType(); // 通过while循环来解析xml文件,直到结束 while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if ("person".equals(parser.getName())) { person = new Person(); person.setId(new Integer(parser.getAttributeValue(0))); } if (person != null) { if ("name".equals(parser.getName())) { person.setName(parser.nextText()); } else if ("age".equals(parser.getName())) { person.setAge(new Short(parser.nextText())); } } break; case XmlPullParser.END_TAG: if ("person".equals(parser.getName())) { if (person != null) { persons.add(person); person = null; } } break; case XmlPullParser.END_DOCUMENT: break; } event = parser.next(); } return persons; } }原文链接:https://www.f2er.com/xml/300480.html