采用Pull解析器解析XML内容
2015-10-15 08:43
363 查看
采用Pull解析器解析XML内容
现在来讲一下 采用Pull解析器解析XML内容在Android已经集成进了Pull解析器,所以无需添加任何jar文件
Android系统本身用到的xml,其内部也是采用Pull解析器进行解析的。
下面是一个xml文件:person.xml ,是直接放在src目录下的
<span style="white-space:pre"> </span><?xml version="1.0" encoding="UTF-8" ?> <!-- start document --> <persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>zhangxiaoxiao</name> <age>25</age> </person> </persons> <!-- end document -->现在写一个在PersonService类,这是解析xml的类
/** * 采用Pull解析器解析XML内容 * 获取数据 * @param xml * @return * @throws Exception */ public static List<Person> getPersons(InputStream xml) throws Exception{ List<Person> persons = null; Person person = null; //获取Pull解析器,两个方法: //一:XmlPullParser pull = XmlPullParserFactory.newInstance().newPullParser(); //二:Xml是Android提供的帮助类Xml.newPullParser() XmlPullParser pullParser = Xml.newPullParser(); //为Pull解析器设置要解析的XML数据 pullParser.setInput(xml, "UTF-8"); int event = pullParser.getEventType(); //event事件没到文档结束的时候 while(event != XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_DOCUMENT: //读到<persons>节点: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: //读到开始标签时 //pullParser.getName()节点的名字 if( "person".equals(pullParser.getName()) ){ //获取parser里的属性id int id = Integer.parseInt(pullParser.getAttributeValue(0)); //new 一个Person对象 person = new Person(); person.setId(id); } if( "name".equals(pullParser.getName()) ){ //返回这个节点的后面的文本节点值,也就是这个节点的文本内容 String name = pullParser.nextText(); person.setName(name); } if( "age".equals(pullParser.getName()) ){ int age = Integer.parseInt(pullParser.nextText()); person.setAge(age); } break; case XmlPullParser.END_TAG: //若读到person尾节点,就把person对象add到List中,后对象设置为null if( "person".equals(pullParser.getName()) ){ persons.add(person); person = null; } break; } event = pullParser.next(); } return persons; }
用Junit单元测试类测试
先在清单文件AndroidManifest.xml中加入:
<uses-library android:name="android.test.runner"/> <span style="white-space:pre"> </span><instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.me_xmlandroid" android:label="解析器解析和生成XML内容"></instrumentation>在测试类中:
public class PersonServiceTest extends AndroidTestCase{ private static final String TAG = "PersonServiceTest"; public void testPersons() throws Exception{ //取得当前类的class对象 获取类加载器ClassLoader , //用类加载器getResourceAsStream()方法从根路径寻找这个文件,以输入流的方式返回出来 InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml"); List<Person> persons = PersonService.getPersons(xml); for (Person person : persons) { Log.i(TAG, person.toString()); } } }
现在就可以测试一下了,是可以准确的对xml进行解析的
相关文章推荐
- 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹
- delete old data in elasticsearch
- linux后台server开发环境的部署配置和验证(nginx+apache+php-fpm+FASTCGI(C/C++))
- 将鼠标移到文本弹出一些字幕CSS达到,不及格JS达到
- LeetCode Search Insert Position
- 2015.10.15 杭州-云栖大会 阿里的主场
- 网络文件系统nfs文件系统使用
- 重写控件
- git版本控制简介
- 国嵌第1季总结:《嵌入式的童年》
- CF 585B Phillip and Trains(预处理+BFS)
- 2016 小米笔试
- Android Studio Gradle 缓存目录设置
- 刘国斌iOS,iOS蓝懿
- USACO Section 2.1
- 对入门类编程书的最新观点,请勿轻信
- iOS中的数据库应用
- C++ 类继承的对象布局
- 洛谷U1404 find
- XSS盲打