Android利用XmlPullParse对XML进行解析读取(一)
2013-08-28 16:38
387 查看
PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。Pull解析技术是第三方开发的开源技术,它同样可以应用于JavaSE开发。
PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。
常用的XML pull的接口和类:
XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了XML信息集的序列。
XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。
XmlPullParserException:抛出单一的XML pull解析器相关的错误。
这是我自己建的一个xml文件person.xml
好了,现在的目的就是把person.xml里的内容解析出来,看一下xml内容利用我们的面向对象的知识,我们需要建立一个实体类来存放解析出来的信息
所以先来建立一个Person类。
好了,实体类建好之后需要开始解析xml的步骤,建一个Service(这里其实应该抽象出一个接口来,让自己写的service实现这个接口,懒得写了。呵呵)
方法写完了,咱们来测试一下。在项目清单文件中添加测试库。
建立测试类
现在右击测试方法,选择Android JunitTest,切换到DDMS控制台。查看LogCat输入的日志
成功了,PULL解析XML文件就是这么简单(LogCat控制台我使用了过滤器,过滤我定义的Tag,所以只显示我想看到的信息)。
大家互相学习。初次研究Android,有好的建议提出来,和大家共勉。
PULL 的工作原理:XML pull提供了开始元素和结束元素。当某个元素开始时,我们可以调用parser.nextText从XML文档中提取所有字符数据。当解释到一个文档结束时,自动生成EndDocument事件。
常用的XML pull的接口和类:
XmlPullParser:XML pull解析器是一个在XMLPULL VlAP1中提供了定义解析功能的接口。
XmlSerializer:它是一个接口,定义了XML信息集的序列。
XmlPullParserFactory:这个类用于在XMPULL V1 API中创建XML Pull解析器。
XmlPullParserException:抛出单一的XML pull解析器相关的错误。
这是我自己建的一个xml文件person.xml
<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="1"> <name>小明</name> <age>25</age> </person> <person id="2"> <name>哈哈</name> <age>76</age> </person> </persons>大家注意一下我存放XML的位置
好了,现在的目的就是把person.xml里的内容解析出来,看一下xml内容利用我们的面向对象的知识,我们需要建立一个实体类来存放解析出来的信息
所以先来建立一个Person类。
package com.wjg.xml.entity; public class Person { public Person() { super(); } public Person(Integer id, String name, Integer age) { super(); this.id = id; this.name = name; this.age = age; } private Integer id; private String name; private Integer 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; } @Override public String toString() { return "Person [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
好了,实体类建好之后需要开始解析xml的步骤,建一个Service(这里其实应该抽象出一个接口来,让自己写的service实现这个接口,懒得写了。呵呵)
package com.wjg.xml.service; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserFactory; import android.util.Xml; import com.wjg.xml.entity.Person; public class PollXmlService { public static final List<Person> readXml(InputStream xml) throws Exception{ //通过XmlPullParserFactory获取XmlPullParser对象 //XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); //XmlPullParser xParser=factory.newPullParser(); XmlPullParser xmlPullParser=Xml.newPullParser(); //为Pull解析器设置输入流和编码格式 xmlPullParser.setInput(xml, "UTF-8"); //获取XMl读取的位置 int eventType=xmlPullParser.getEventType(); List<Person> persons=null; Person person=null; while(eventType!=XmlPullParser.END_DOCUMENT){ switch (eventType) { case XmlPullParser.START_DOCUMENT: persons=new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if(xmlPullParser.getName().equals("person")){ person=new Person(); person.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0))); }else if(xmlPullParser.getName().equals("name")){ person.setName(xmlPullParser.nextText()); }else if(xmlPullParser.getName().equals("age")){ person.setAge(Integer.parseInt(xmlPullParser.nextText())); } break; case XmlPullParser.END_TAG: if(xmlPullParser.getName().equals("person")){ persons.add(person); person=null; } break; case XmlPullParser.END_DOCUMENT: xml.close(); } eventType=xmlPullParser.next(); } return persons; } }
方法写完了,咱们来测试一下。在项目清单文件中添加测试库。
建立测试类
package com.wjg.xml.test; import java.io.InputStream; import java.util.List; import android.test.AndroidTestCase; import android.util.Log; import com.wjg.xml.entity.Person; import com.wjg.xml.service.PollXmlService; public class TestXml extends AndroidTestCase{ private final static String TAG="TestXml"; public void testReadXml() throws Exception{ /** * xml文件放在src目录下,编译时会放在类路径下,所以通过类加载器的getResouceAsStream方法 * 可获得文件的输入流 */ InputStream is=this.getContext().getClassLoader().getResourceAsStream("person.xml"); //调用方法,执行读取操作 List<Person> persons=PollXmlService.readXml(is); for (Person person : persons) { //LogCat控制台输出person信息 Log.i(TAG, person.toString()); } } }
现在右击测试方法,选择Android JunitTest,切换到DDMS控制台。查看LogCat输入的日志
成功了,PULL解析XML文件就是这么简单(LogCat控制台我使用了过滤器,过滤我定义的Tag,所以只显示我想看到的信息)。
大家互相学习。初次研究Android,有好的建议提出来,和大家共勉。
相关文章推荐
- android利用XmlPullParse对XML进行解析读取(1) + (2) 总结
- Android利用Soap读取WebService并且解析XML的DataSet数据
- android JSON与XmlPullParse解析网络连接数据
- 利用SAX、DOM和Pull实现对schools.xml的解析并进行单元测试
- Android数据存储之XmlPull解析XML文件(读取部分)
- android中pull解析,读取xml中的实体类(通过xml发送实体类)
- Android开发之Pull解析读取和生成XML文件
- Android-利用Document来对xml进行读取和写入操作-刘宇
- Android中使用PULL方式解析XML和XmlSerializer进行序列化
- android应用开发之利用SAX、DOM和Pull实现对XML文件的解析并进行单元测试
- Android利用Soap读取WebService并且解析XML的DataSet数据
- Android中使用XmlPullParse解析xml文件
- Android 中利用SAX ,Dom,pull解析 XML 文件
- android利用HttpURLConnection+XmlPullParser解析Xml文件
- Android利用Soap读取WebService并且解析XML的DataSet数据
- android利用pull技术来解析和生成xml文件
- android_xml解析之 使用PULL读取XML文件 .
- Android 个人学习笔记之--- Pull解析XML文件
- Android之pull解析服务端的XML
- Android XmlPullParser工具解析