如题,应该网络上讲解的是比较多了,我这里只是做一个简单的总结。
首先在工程的src目录下建一个person.xml文件:
好,我们现在就用pull方式来解析这个xml文件,文件内容如下:注意xml文件,几个重要的判断条件:文档开始,文档结束,元素开始,元素结束。元素的属性对应的value,元素的txt值。搞清楚这个就很明白了pull的解析原则了。
为了方便,将xml中的person节点构建成一个model类
/** * @FILE:Person.java * @AUTHOR:Administrator * @DATE:2013-5-5 下午4:20:15 **/ package com.example.entity; /******************************************* * * @CLASS:Person * @DESCRIPTION: * @AUTHOR:Administrator * @VERSION:v1.0 * @DATE:2013-5-5 下午4:20:15 *******************************************/ public class Person { private Integer id; private String name; private Integer age; public Person() { } public Person(Integer id, String name, Integer age) { this.id = id; this.name = name; this.age = age; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
再次解析这个xml文件:下面第一句就是用类加载器加载xml文件。
如果xml放在了assets文件夹下,那么就要用另一种方法来加载文件了:InputStream inputStream=getResources().getAssets().open("person.xml");不管用哪种方法加载文件,最终结果都是要获得InputStream对象。
InputStream inputStream = this.getClass().getClassLoader() .getResourceAsStream("person.xml"); List<Person> persons = PersonService.getPersons(inputStream);
public class PersonService { public static List<Person> getPersons(InputStream is) { List<Person> persons = null; Person person = null; // 获得一个pull解析器 XmlPullParser pullParser = Xml.newPullParser(); try { // 为pull解析器提供一个xml文件的输入流 pullParser.setInput(is, "utf-8"); // 获取的事件类型 int event = pullParser.getEventType(); // 对事件类型进行判断(注意这里的常量XmlPullParser) while (event != XmlPullParser.END_DOCUMENT) { switch (event) { // 文档开始 case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; // 元素开始 case XmlPullParser.START_TAG: if ("person".equals(pullParser.getName())) { person = new Person(); // 注意这里属性的位数是从0开始 person.setId(new Integer(pullParser .getAttributeValue(0))); } if ("name".equals(pullParser.getName())) { person.setName(pullParser.getText()); } if ("age".equals(pullParser.getName())) { person.setAge(new Integer(pullParser.getText())); } break; case XmlPullParser.END_TAG: if ("person".equals(pullParser.getName())) { persons.add(person); person = null; } break; } } // 让pull解析器的指针指向下一个元素 event = pullParser.next(); } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return persons; }注释应该很明白了,呵呵。就总结到这里吧。
作者:yehui18sui 发表于2013-5-8 22:17:04 原文链接
阅读:40 评论:0 查看评论