Android技术学习,更多知识请访问https://www.itkc8.com
1.使用Pull解析器解析XML文档
Pull解析器的运行方式和SAX解析器很相似,它提供了类似的事件,比如文档开始、文档结束、开始元素和结束元素等。使用parser.next()方法可以进入下一个元素并触发相应的事件。各种事件均已数字的形式被发送,因此可以在程序中使用一个switch语句来对事件进行选择,然后进行相应的事件处理。
1.1事件类型
Pull解析器提供的事件类型总共有5种,分别如下:
(1)START_DOCUMENT 文档开始
(2)START_TAG 开始元素
(3)TEXT 文本
(4)END_TAG 结束元素
(5)END_DOCUMENT 文档结束
1.2常用方法
使用Pull解析器XmlPullParser解析XML文档时,主要会用到以下几个常用方法。
(1)int getAttributeCount(); //获取当前元素的属性个数
(2)String getAttributeValue(int index); //获取属性值
(3)int getEventType(); //获取事件类型
(4)String getName(); //用于START_TAG和END_TAG事件中,获取当前元素的名字
(5)int next(); //处理下一个元素
(6)int nextText(); //用于START_TAG事件中,获得下一个TEXT类型的元素
1.3创建Pull解析器
可以通过以下两个步骤创建一个Pull解析器。
(1)通过调用XmlPullParserFactory工厂类的newInstance()方法,创建一个Pull解析器工厂对象。
(2)通过调用Pull解析器工厂对象的newPullParser()方法,创建一个Pull解析器对象。
创建好了Pull解析器对象之后,就可以通过调用Pull解析器对象的setInput()方法传入想要解析的XML文档了。其中,setInput()方法提供了两种重载的形式,分别为:
(1)void setInput(Reader in);
(2)void setInput(InputStream inputStream, String inputEncoding);
1.4实例
如下的代码使用Pull解析器对上两篇博文中提到的“person.xml”文档进行了解析,提取出了XML文档中的person信息,并存储到了Person对象列表。
1 /*
2 * Function : 使用Pull解析器解析XML文档
3 * Param : inputStream 以输入流的形式传入XML文档
4 * inputEncoding XML文档的编码格式
5 * Retuen : List<Person> Person对象列表
6 * Author : 博客园-依旧淡然
7 */
8 public static List<Person> readXML(InputStream inputStream, String inputEncoding) throws Exception {
9
10 List<Person> list = null; //存储解析得到的所有Person对象
11 Person person = null; //存储解析得到的单个Person对象
12
13 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); //创建Pull解析器工厂
14 XmlPullParser xmlPullParser = factory.newPullParser(); //创建Pull解析器
15 xmlPullParser.setInput(inputStream, inputEncoding); //以输入流的形式传入所要解析的XML文档
16
17 int eventType = xmlPullParser.getEventType(); //获取事件类型
18 while(eventType != XmlPullParser.END_DOCUMENT) {
19 switch(eventType) {
20 case XmlPullParser.START_DOCUMENT: //文档开始
21 list = new ArrayList<Person>();
22 break;
23 case XmlPullParser.START_TAG: //开始元素
24 if(xmlPullParser.getName().equals("person")) {
25 person = new Person();
26 int id = Integer.parseInt(xmlPullParser.getAttributeValue(0)); //获取元素的属性值
27 person.setId(id);
28 } else if(xmlPullParser.getName().equals("name")) {
29 String name = xmlPullParser.nextText(); //获取元素的内容
30 person.setName(name);
31 } else if(xmlPullParser.getName().equals("age")) {
32 int age = Integer.parseInt(xmlPullParser.nextText());
33 person.setAge(age);
34 }
35 break;
36 case XmlPullParser.END_TAG: //结束元素
37 if(xmlPullParser.getName().equals("person")) {
38 list.add(person);
39 person = null;
40 }
41 break;
42 }
43 eventType = xmlPullParser.next(); //产生循环,遍历所有元素
44 }
45 return list;
46 }
非常感谢http://www.cnblogs.com/menlsh/archive/2013/05/09/3070226.html
需要注意的一点是,使用Pull解析器时,需要在工程中导入kxml2-2.2.2.jar包。
Android技术学习,更多知识请访问https://www.itkc8.com