- 浏览: 206729 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
xyyx_nk:
在demo中没有下载的示例,能详细说一下怎么监听下载过程吗?比 ...
DhNet 网络http工具(带缓存功能哦) -dhroid文档 -
zhaoguowei998:
dhroid ioc模块对 加密混淆问题 -
zhaoguowei998:
你太牛了,佩服佩服,以后要多想你请教了
dhroid ioc模块对 加密混淆问题 -
白色蜻蜓:
转载下您的文章,已注明出处。
IOS开发之百度地图API应用 -
wenjiefeng:
你好,在andrioidpn-client客户端源码里,Not ...
Android 推送之原理与初触Androidpn(Android Push Notification)
Pull是Android内置的xml解析器。Pull解析器的运行方式与SAX 解析器相似。它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。事件将作为数值代码被发送,因此可以使用一个switch对感兴趣的事件进行处理。当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型节点的值。
下面我们来写代码学习pull解析技术。
要解析的xml文件名为:target.xml,解析的内容如下:
- <?xml version="1.0" encoding="UTF-8"?>
- <persons>
- <person id="23">
- <name>liming</name>
- <age>30</age>
- </person>
- <person id="20">
- <name>lixiangmei</name>
- <age>25</age>
- </person>
- </persons>
同样,我们在android的工程下写代码测试,使用android的单元测试技术进行测试,当然测试类还要继承AndroidTestCase
在layout/res/AndroidManifest.xml文件下添加单元测试所需要的代码:
在AndroidManifest.xml文件的application节点下添加以下代码:
在AndroidManifest.xml文件的manifest节点下添加以下代码:
- <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="你的测试文件所在的包名" android:label="Tests for My App" />
- public class Person {
- private Integer id;
- private String name;
- private Short age;
- public Person(){}//无参构造器
- public Person(Integer id, String name, Short age) {
- this.id = id;
- this.name = name;
- this.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 Short getAge() {
- return age;
- }
- public void setAge(Short age) {
- this.age = age;
- }
- @Override
- public String toString() {
- return "Person [age=" + age + ", id=" + id + ", name=" + name + "]";
- }
- }
pull解析的核心类:PULLPersonService.java,里面包含两个方法,一个是生成xml文件的方法,一个事解析xml文件的方法。
- /**
- * 采用Pull解析XML内容
- */
- public class PULLPersonService {
- /**
- * 使用pull技术生成xml文件
- * @param persons
- * @param writer
- * @throws Throwable
- */
- public static void save(List<Person> persons, Writer writer) throws Throwable{
- XmlSerializer serializer = Xml.newSerializer();
- serializer.setOutput(writer);
- serializer.startDocument("UTF-8", true);
- serializer.startTag(null, "persons");
- for(Person person : persons){
- serializer.startTag(null, "person");
- serializer.attribute(null, "id", person.getId().toString());
- serializer.startTag(null, "name");
- serializer.text(person.getName());
- serializer.endTag(null, "name");
- serializer.startTag(null, "age");
- serializer.text(person.getAge().toString());
- serializer.endTag(null, "age");
- serializer.endTag(null, "person");
- }
- serializer.endTag(null, "persons");
- serializer.endDocument();
- writer.flush();
- writer.close();
- }
- /**
- * 使用pull技术解析xml
- * @param inStream
- * @return
- * @throws Throwable
- */
- public static List<Person> getPersons(InputStream inStream) throws Throwable{
- List<Person> persons = null;
- Person person = null;
- XmlPullParser parser = Xml.newPullParser();
- parser.setInput(inStream, "UTF-8");
- int eventType = parser.getEventType();//产生第一个事件
- while(eventType!=XmlPullParser.END_DOCUMENT){//只要不是文档结束事件
- switch (eventType) {
- case XmlPullParser.START_DOCUMENT:
- persons = new ArrayList<Person>();
- break;
- case XmlPullParser.START_TAG:
- String name = parser.getName();//获取解析器当前指向的元素的名称
- if("person".equals(name)){
- person = new Person();
- person.setId(new Integer(parser.getAttributeValue(0)));
- }
- if(person!=null){
- if("name".equals(name)){
- person.setName(parser.nextText());//获取解析器当前指向元素的下一个文本节点的值
- }
- if("age".equals(name)){
- person.setAge(new Short(parser.nextText()));
- }
- }
- break;
- case XmlPullParser.END_TAG:
- if("person".equals(parser.getName())){
- persons.add(person);
- person = null;
- }
- break;
- }
- eventType = parser.next();
- }
- return persons;
- }
- }
- public class PersonServiceTest extends AndroidTestCase {
- private static final String TAG = "PersonServiceTest";
- public void testPullGetPersons() throws Throwable{
- InputStream inStream = getClass().getClassLoader().getResourceAsStream("target.xml");
- List<Person> persons = PULLPersonService.getPersons(inStream);
- for(Person person : persons){
- Log.i(TAG, person.toString());
- }
- }
- public void testSave() throws Throwable{
- List<Person> persons = new ArrayList<Person>();
- persons.add(new Person(34, "lili", (short)12));
- persons.add(new Person(25, "mimi", (short)32));
- persons.add(new Person(33, "xixi", (short)40));
- StringWriter writer = new StringWriter();
- PULLPersonService.save(persons, writer);
- Log.i(TAG, writer.toString());
- }
- }
public class PersonServiceTest extends AndroidTestCase { private static final String TAG = "PersonServiceTest"; public void testPullGetPersons() throws Throwable{ InputStream inStream = getClass().getClassLoader().getResourceAsStream("target.xml"); List<Person> persons = PULLPersonService.getPersons(inStream); for(Person person : persons){ Log.i(TAG, person.toString()); } } public void testSave() throws Throwable{ List<Person> persons = new ArrayList<Person>(); persons.add(new Person(34, "lili", (short)12)); persons.add(new Person(25, "mimi", (short)32)); persons.add(new Person(33, "xixi", (short)40)); StringWriter writer = new StringWriter(); PULLPersonService.save(persons, writer); Log.i(TAG, writer.toString()); } }
用单元测试运行testPullGetPersons()方法,运行结果如下:
用单元测试运行 testSave()方法,运行结果如下:
- <?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
- <persons>
- <person id="34">
- <name>lili</name>
- <age>12</age>
- </person>
- <person id="25">
- <name>mimi</name>
- <age>32</age>
- </person>
- <person id="33">
- <name>xixi</name>
- <age>40</age>
- </person>
- </persons>
到此完成了用pull技术完成xml的解析,和生成xml文件。
<script type="text/javascript"></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script>
发表评论
-
Dhdb 简化sqlite数据库操作--dhroid文档
2014-04-15 12:30 1361android数据库其实使用的不多,dhroid框架中的 ... -
dhroid ioc模块对 加密混淆问题
2014-04-14 12:52 976大家应该已经看过ioc ... -
NetJSONAdapter 网络化的adapter(高效) -dhroid文档
2014-04-04 12:15 900关于adapter 我想对于大家来说已经不陌生了,基本应用 ... -
DhNet 网络http工具(带缓存功能哦) -dhroid文档
2014-03-24 13:36 1519网络请求是大多数应用不可获取的一部分,曾经和一个其他公司的 ... -
eventbus 事件总线-dhroid文档
2014-03-23 11:47 1272你听过onClick 事件,onItemClick 事件, ... -
ioc基础(视图,资源,assert注入)-dhroid文档
2014-03-21 12:59 870上一节 Android 极速开发框架 dhroid来了 ... -
ioc高级(接口,对象注入)-dhroid文档
2014-03-21 13:04 1143前一章 ioc基础( ... -
IOC容器详解(想晋升的进来)---dhroid框架教教程(一)
2014-03-20 10:30 984控制反转(Inversion of Control,英文缩写 ... -
Android 极速开发框架 dhroid来了(提供demo)
2014-03-19 17:24 1397我们公司内部使用的商业级android开发框架dhr ... -
HttpClient的3种超时说明
2013-03-14 11:05 890/* 从连接池中取连接的超时时间 */ConnManag ... -
MeasureSpec介绍及使用详解
2013-01-24 21:21 760一个MeasureSpec封装了父 ... -
Android学习——TextView 设置中划线 下划线
2012-10-31 14:42 3465android:textAppearance ... -
ListView与其中的Button,EditText,RatingBar等widget的click事件
2012-10-26 14:48 881在<RelativeLayout>中 an ... -
在线词典API
2012-09-09 19:34 753QQ词典 http://dict.qq.com/dic ... -
android Uri获取真实路径转换成File的方法
2012-08-23 12:40 3083data.getData()返回的 ... -
Java之WeakReference与SoftReference使用讲解
2012-08-22 09:46 694如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集 ... -
Android自定义捕获Application全局异常
2012-08-21 17:24 1219package qianlong.qlmobile ... -
android 缩放图片与内存溢出
2012-08-03 09:43 1233常用的Android版缩放图片代码: ContentRes ... -
获取手机设备方向
2012-08-03 09:33 1467@Override public void onS ... -
activity四种启动模式
2012-08-03 09:30 813Activity 有四种加载模式 [1] standa ...
相关推荐
Android XML 多种解析生成 Android 平台中,XML 文件解析和生成是非常重要的一部分。XML 文件可以存储和交换结构化数据,广泛应用于 Android 应用程序中。本文将介绍 Android 中使用多种解析和生成 XML 文件的方法...
Android系统提供了一种轻量级的XML解析方式——PULL解析器(Pull Parser),它适用于处理大型XML文档,因为它不需要像DOM解析器那样一次性加载整个XML文档到内存中。PULL解析器通过事件驱动的方式,按需解析XML文档...
本篇文章将深入探讨如何在Android环境中使用内置的Pull解析器来解析和生成XML内容。 首先,我们需要理解什么是Pull解析器。Pull解析器是一种事件驱动的解析模型,它不像SAX解析器那样需要开发者提供回调方法,而是...
本项目“Android应用源码之比较通用的XML解析方法”旨在探讨和实现不同XML解析方式,这对于理解和优化Android应用的性能至关重要。在毕业设计或论文研究中,掌握XML解析技巧是提升移动开发App质量的关键。 1. **DOM...
- `PullParser`:它是Android系统内置的一种轻量级的XML解析器,基于事件驱动,与SAX类似,但更适应Android环境。 - `StaX`:Streaming API for XML,是另一种基于流的解析方式,介于SAX和DOM之间,提供了一种可...
在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...
总结来说,XML解析在Android开发中主要涉及DOM、SAX和Pull三种方法,每种方法各有优缺点,应根据具体需求选择。而JSON数据通常借助于Gson或Jackson库,实现高效的数据交换。理解并熟练运用这些知识点,将有助于提升...
4. Android内置的XML解析库: Android SDK还提供了`org.xmlpull.v1.XmlPullParser`和`org.xmlpull.v1.XmlSerializer`,这两个类用于XML的解析和生成。它们是轻量级的,适用于资源有限的移动设备。 5. Android的...
在Android 4.0及以上版本,我们可以使用内置的Java XML DOM API来实现XML解析。下面将详细介绍在Android中使用DOM解析XML的基本步骤和关键知识点。 1. **导入XML解析库** 在Android项目中,我们不需要额外导入库,...
在Java编程中,处理XML文件通常需要使用特定的解析库,本资源提供的"XML解析jar包"包含了多种流行的XML解析方法,如SAX、PULL、DOM、JDOM和DOM4J。 1. **SAX解析器**:SAX(Simple API for XML)是一种事件驱动的...
Android SDK本身内置了两种XML解析方式:DOM解析和SAX解析。DOM解析会一次性加载整个XML文档到内存,适合小规模的XML处理;而SAX解析采用事件驱动的方式,逐行读取XML,占用内存少,适用于处理大型XML文件。除了系统...
总之,《老罗Android开发视频教程》中关于XML解析的内容,旨在帮助开发者掌握不同解析方法,以便在实际项目中灵活选择和应用,提高应用的性能和用户体验。通过学习和实践,开发者能更好地理解和处理XML数据,提升...
2. **Android内置的XML解析库**: - `org.xmlpull.v1.XmlPullParser`:Android提供的Pull解析API,用于高效、低内存消耗地解析XML。 - `org.w3c.dom.DocumentBuilderFactory` 和 `javax.xml.parsers....
Android提供了一个基于事件的XML解析API,称为Pull解析器。它类似于SAX,也是事件驱动的,但使用更简单,因为它是API级别的,不需要实现接口。开发者可以通过调用Pull解析器的next()方法按需获取下一个事件,这样...
XML解析通常分为DOM(Document Object Model)解析和SAX(Simple API for XML)解析。DOM解析会将整个XML文档加载到内存中,形成一个树形结构,便于查找和操作;而SAX则采用事件驱动模型,只在读取时处理数据,内存...
的 Android SDK 提供了在 Android 平台上使用 JaVa 语言进行 Android 应用开发必须的工具和 API 接口。 特性 • 应用程序框架 支持组件的重用与替换 • Dalvik Dalvik Dalvik Dalvik 虚拟机 专为移动设备优化 • ...
Pull解析器(XMLPullParser)是Android SDK内置的一种轻量级、高效的XML解析工具,适用于处理大体积的XML数据,避免了DOM解析可能导致的内存消耗过大问题。与SAX解析器相似,Pull解析器也是基于事件驱动的,它会逐个...
在Android客户端,开发者通常有三种XML解析方式:DOM(Document Object Model)、SAX(Simple API for XML)和PULL解析器。DOM一次性加载整个XML文档到内存,适合小型数据处理,但不适合内存有限的移动设备。SAX采用...
二、XML解析 XML(eXtensible Markup Language)是一种用于标记数据的语言,广泛应用于Web服务。Android提供了SAX、DOM和Pull解析器来处理XML数据。 1. SAX解析器:SAX是一种事件驱动的解析方式,适合处理大体积的...
6. **XML解析与生成**: - Android 中通常使用XML来存储和读取数据,如配置文件、布局文件等。Android提供了DOM、SAX和Pull解析器来解析XML。XML生成则涉及到创建XML文件或XML字符串的过程。 7. **SQLite 分页读取...