1 package com.maitewang.internetdemo.demo; 2 3 import java.io.InputStream; 4 import java.util.ArrayList; 5 import java.util.List; 6 import org.xmlpull.v1.XmlPullParser; 7 import org.xmlpull.v1.XmlPullParserFactory; 8 9 import android.util.Xml; 10 11 public class XmlDemo { 12 public static List<Person> getPerson(InputStream is) throws Exception { 13 Person person = null; 14 List<Person> persons = null; 15 // 两种方法获取对象,其实哪种都一样.. 16 // 第一种 17 XmlPullParser pullParser = Xml.newPullParser(); 18 // 第二种 生成工厂 然后工厂获取. 19 XmlPullParserFactory xppf = XmlPullParserFactory.newInstance(); 20 XmlPullParser pullParser1 = xppf.newPullParser(); 21 // 几种事件类型 22 // XmlPullParser.START_DOCUMENT(开始解析) 23 // XmlPUllParser.START_TAG(开始元素) 24 // XmlPullParser.TEXT(解析文本): 25 // XmlPullParser.END_TAG(结束元素); 26 // XmlPullParser.END_DOCUMENT(结束解析) 事件结束 每一种都与之对应. 27 // 解析中 元素又有属性.属性该怎么解析? 取出元素 文本. 28 29 // 2:设置要解析的流,编码 30 pullParser.setInput(is, "UTF-8"); 31 // 3:获取编码事件 32 int event = pullParser.getEventType(); 33 // 4:中间开始判断事件 34 while (event != XmlPullParser.END_DOCUMENT) { 35 switch (event) { 36 case XmlPullParser.START_DOCUMENT: 37 // 判断是否文档开头. 38 // 一般这个时候开始创建对象准备分解文档 39 persons = new ArrayList<Person>(); 40 break; 41 case XmlPullParser.START_TAG: 42 // 开始进入元素了 43 // pullParser.getName();获取元素名字 也就是<person></person> 这个 44 if ("person".equals(pullParser.getName())) { 45 46 // 取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index); 47 int id = new Integer(pullParser.getAttributeValue(0)); 48 person = new Person(); 49 person.setId(id); 50 } 51 if (person == null) { 52 if ("name".equals(pullParser.getName())) { 53 // 方法名称也出来了.pullParser.nextText();获取元素值 54 person.setName(pullParser.nextText()); 55 } 56 if ("age".equals(pullParser.getName())) { 57 person.setAge(pullParser.nextText()); 58 } 59 } 60 case XmlPullParser.END_TAG: 61 if ("person".equals(pullParser.getName())) { 62 persons.add(person); 63 person = null; 64 } 65 break; 66 } 67 // 方法名称也出来了,next开始读取下一条元素. 68 event = pullParser.next(); 69 70 } 71 72 return persons; 73 74 } 75 }
1:实例华XmlPullParser对象,2种方式:
1.1:Xml.newPullParser();
1.2: 获取工厂,然后从工厂里面生产
XmlPullParserFactory xppf = XmlPullParserFactory.newInstance();
XmlPullParser xpp = xppf.newPullParser();
2:因为pull解析是根据事件来的,所以需要判断事件。
// 几种事件类型
// XmlPullParser.START_DOCUMENT(开始解析)
//
XmlPUllParser.START_TAG(开始元素)
// XmlPullParser.TEXT(解析文本):
//
XmlPullParser.END_TAG(结束元素);
// XmlPullParser.END_DOCUMENT(结束解析) 事件结束
每一种都与之对应.
3:Method:
pullParser.getName();获取元素名字
取出属性元素id为0的值,方法:pullParser.getAttributeValue(int index); AttriBute 元素,根据这一系列操作。
pullParser.nextText(); 获取元素内容。
pullParser.next();读取下一条元素。