首页 > 代码库 > android网络编程之pull解析xml

android网络编程之pull解析xml

android网络编程之pull解析xml

  除了前面介绍过的SAX以及DOM方法,还可以通过Pull对xml文档进行一个解析。Pull解析器的解析方式与SAX非常相似。它提供了类似的事件,使用parser.next()可以进入下一元素并触发相应事件,事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行选择,然后进行相应的处理,调用parser.nextText()方法可以获取下一个Text类型元素的值。

  pull解析器特点:

    *结构简单:一个接口、一个例外、一个工厂就组成了Pull解析器

    *简单易用:只有5个事件:

      1.START_DOCUMENT--->开始解析事件

      2.START_TAG--->开始元素

      3.END_TAG--->结束元素

      4.TEXT--->解析文本

      5.END_DOCUMENT--->结束解析事件

  直接看代码:
public class PullPersonParse {                  /**	 * 使用pull技术解析xml	 * @param inStream	 * @return	 * @throws Throwable	 */	public static ArrayList<Person> pullParsePersons(InputStream inStream) throws Throwable{		ArrayList<Person> persons = null;		Person person = null;		XmlPullParser parser = Xml.newPullParser();		parser.setInput(inStream, "UTF-8");		int eventType = parser.getEventType();//产生第一个事件		while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束解析事件			switch (eventType) {			case XmlPullParser.START_DOCUMENT://开始解析事件				persons = new ArrayList<Person>();				break;				case XmlPullParser.START_TAG://开始元素				String name = parser.getName();//获取解析器当前指向的元素的名称				if("person".equals(name)){					person = new Person();					person.setId(new Integer(parser.getAttributeValue(0)));				}				if(person!=null){					if("name".equals(name)){						person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值					}					if("age".equals(name)){						person.setAge(new Short(parser.nextText()));					}				}				break;			case XmlPullParser.END_TAG://结束元素				if("person".equals(parser.getName())){					persons.add(person);					person = null;				}				break;			}			eventType = parser.next();		}		return persons;	}}

 


   从内存占用率和执行效率方面考虑,应该尽量优先考虑sax和pull方式进行xml文件的解析。

 

      

android网络编程之pull解析xml