`
844604778
  • 浏览: 589084 次
文章分类
社区版块
存档分类
最新评论

Android中使用Pull解析器解析xml文件+进行简单的单元测试

 
阅读更多
我来给大家介绍Android用得最多的一种解析xml数据的技术:Pull解析器解析,之前介绍过Java中两种解析xml的技术:Dom解析和SAX解析,Dom比较适合小数据量的解析,然而SAX适合大数据量的解析工作,但比较复杂。第三种解析技术Pull解析,是一种比前面两种方法更加简单的解析技术,更加符合面向对象的思想,因为这是按照我们正常的思考方式进行解析,下面来看看利用这种解析器的实现过程。

首先我们需要知道这个xml文件的内容:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <persons>
  3. <person id="23">
  4. <name>liming</name>
  5. <age>30</age>
  6. </person>
  7. <person id="20">
  8. <name>zhangxiaoxiao</name>
  9. <age>25</age>
  10. </person>
  11. </persons>
复制代码
这是最典型的xml格式的数据,它有以下几个组成部分
1. START_DOCUMENT--- 文档的开始部分
  • <?xml version="1.0" encoding="UTF-8"?>

2. START_TAG---开始标签

  • <persons>

3. END_TAG---结束标签

  • </persons>

4. END_DOCUMENT---文档结束部分

知道文档的组织结构之后,就可以往这个方向去思考怎么解析数据了
定义以下方法
  1. /**
  2. * 获取数据
  3. * @param xml
  4. * @return
  5. * @throws Exception
  6. */
  7. public static List<Person> getPersons(InputStream xml) throws Exception {
  8. List<Person> persons = null;
  9. Person person = null;
  10. XmlPullParser pullParser = Xml.newPullParser(); // 获取Pull解析器
  11. pullParser.setInput(xml, "UTF-8");//为Pull解析器设置要解析的XML数据
  12. int event = pullParser.getEventType();//获取第一次解析所产生的事件
  13. while (event != pullParser.END_DOCUMENT) {

  14. switch (event) {
  15. case XmlPullParser.START_DOCUMENT:
  16. persons = new ArrayList<Person>();
  17. break;
  18. case XmlPullParser.START_TAG:
  19. if("person".equals(pullParser.getName())){
  20. int id = new Integer(pullParser.getAttributeValue(0));
  21. person = new Person();
  22. person.setId(id);
  23. }
  24. if("name".equals(pullParser.getName())){
  25. String name = pullParser.nextText();
  26. person.setName(name);
  27. }
  28. if("age".equals(pullParser.getName())) {
  29. int age = new Integer(pullParser.nextText());
  30. person.setAge(age);
  31. }
  32. break;

  33. case XmlPullParser.END_TAG:
  34. if("person".equals(pullParser.getName())){
  35. persons.add(person);
  36. person = null;
  37. }
  38. break;
  39. }
  40. event = pullParser.next();

  41. }
  42. return persons;
  43. }
复制代码
解析出来的结果保存到一个集合里,我们通过集合就可把数据取出来了。

因为已经知道xml文档结构,我们当然也可以将数据保存问xml格式的数据
这里需要用到Android为我们提供的xml序列化器,首先需要获得这个序列号器,然后分别设置各个标签的内容,具体实现如下:

  1. /**
  2. * 保存数据
  3. * @param persons
  4. * @param out
  5. * @throws Exception
  6. */
  7. public static void save(List<Person> persons, OutputStream out) throws Exception {
  8. XmlSerializer serializer = Xml.newSerializer(); //得到Xml序列化器
  9. serializer.setOutput(out, "UTF-8");
  10. serializer.startDocument("UTF-8", true);
  11. serializer.startTag(null, "persons");
  12. for(Person person : persons) {
  13. serializer.startTag(null, "person");
  14. serializer.attribute(null, "id", person.getId().toString());

  15. serializer.startTag(null, "name");
  16. serializer.text(person.getName());
  17. serializer.endTag(null, "name");

  18. serializer.startTag(null, "age");
  19. serializer.text(person.getAge().toString());
  20. serializer.endTag(null, "age");

  21. serializer.endTag(null, "person");
  22. }
  23. serializer.endTag(null, "persons");
  24. serializer.endDocument();
  25. out.flush();
  26. out.close();
  27. }
复制代码

这个方法需要传入一个集合,和一个输出流;方法调用结束后,就会把文件输出到指定目录下。

介绍完Pull解析和输出xml文件的方法之后,小巫最近学到了如何在Android下进行简单的单元测试,是一个很重要的技能。
要进行单元测试需要进行以下几个步骤:
1.在AndroidMenifest.xml文件中进行配置,完整的配置文件如下:

  1. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2. package="org.wwj.xml"
  3. android:versionCode="1"
  4. android:versionName="1.0" >

  5. <uses-sdk
  6. android:minSdkVersion="8"
  7. android:targetSdkVersion="15" />

  8. <application
  9. android:icon="@drawable/ic_launcher"
  10. android:label="@string/app_name"
  11. android:theme="@style/AppTheme" >
  12. <activity
  13. android:name=".MainActivity"
  14. android:label="@string/title_activity_main" >
  15. <intent-filter>
  16. <action android:name="android.intent.action.MAIN" />

  17. <category android:name="android.intent.category.LAUNCHER" />
  18. </intent-filter>
  19. </activity>
  20. <uses-library android:name="android.test.runner" />
  21. </application>
  22. <instrumentation android:name="android.test.InstrumentationTestRunner"
  23. android:targetPackage="org.wwj.xml" android:label="Tests for My App" />
  24. </manifest>
复制代码
上面的文件,如入了uses-library,和测试环境instrumentation。
这是必须要做的步骤,不然无法进行单元测试。

2.定义类继承AndroidTestCase

定义一个PersonServiceTest类,继承AndroidTestCase,用于对上面的方法进行测试。

  1. package org.wwj.test;

  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.InputStream;
  5. import java.util.ArrayList;
  6. import java.util.List;

  7. import org.wwj.domain.Person;
  8. import org.wwj.service.PersonService;

  9. import android.test.AndroidTestCase;
  10. import android.util.Log;

  11. /**
  12. * 单元测试类
  13. * @author wwj
  14. * 继承AndroidTestCase
  15. */
  16. public class PersonServiceTest extends AndroidTestCase{
  17. private final static String TAG = "PersonServiceTest"; //定义打印标签

  18. /**
  19. * 测试xml文件解析
  20. * 在logcat中查看结果
  21. * @throws Exception
  22. */
  23. public void testPersons() throws Exception {
  24. //获得输入流
  25. InputStream xml = this.getClass().getClassLoader().getResourceAsStream("person.xml");
  26. List<Person> persons = PersonService.getPersons(xml); //解析文件,返回一个集合
  27. for(Person person : persons) {//增强型for循环,打印输出信息
  28. Log.i(TAG, person.toString());
  29. }
  30. }


  31. /**
  32. * 测试输出文件
  33. * @throws Exception
  34. */
  35. public void testSave() throws Exception {
  36. List<Person> persons = new ArrayList<Person>();
  37. persons.add(new Person(1, "xiaoming", 20));
  38. persons.add(new Person(2, "lishi", 21));
  39. persons.add(new Person(3, "wangwu", 22));

  40. //定义一个文件,保存在当前上下文下的files目录下,输出文件为wwj.xml
  41. File xmlFile = new File(getContext().getFilesDir(), "wwj.xml");
  42. FileOutputStream out = new FileOutputStream(xmlFile);
  43. PersonService.save(persons, out);

  44. }
  45. }
复制代码
3. 找到测试的方法,右键Run--Run Android JUnitTest
如果有如下的测试效果,说明测试通过


1111.png
2013-3-31 11:49:37 上传
下载附件(17.05 KB)

分享到:
评论

相关推荐

    Android中使用pull解析器操作xml文件的解决办法

    在Android开发中,处理XML数据是一项常见的任务,而Android提供了内置的Pull解析器来高效地读取和生成XML文件。本文将详细介绍如何使用Pull解析器来操作XML。 首先,我们来理解什么是Pull解析器。Pull解析器是一种...

    android xml pull解析示例

    XML(eXtensible Markup Language)是一种用于标记...通过以上内容,我们可以了解XML Pull解析的基本概念、工作原理以及如何在Android中使用它来解析XML文档。在实际开发中,熟练掌握这一技术对于处理XML数据至关重要。

    android中使用PULL解析XML

    本文将深入探讨如何在Android中使用PULL解析器(Pull Parser)来解析XML文档,这是一种轻量级且高效的解析方式。 **PULL解析器概述** PULL解析器(Pull Parsing)是一种事件驱动的解析模型,它不需要完整的XML文档...

    在android中使用pull解析xml文件

    本文将深入探讨如何在Android中使用Pull解析器解析XML文件。 一、XML Pull解析器简介 XML Pull解析器(XML Pull API)是一种基于事件驱动的解析模型,它不需预先加载整个XML文档,而是逐行读取,当遇到特定的XML...

    Android中,使用SAX和PULL解析天气预报XML

    本文将深入探讨如何在Android中使用两种常见的XML解析技术——SAX(Simple API for XML)和PULL(Pull Parser)来解析天气预报的XML数据。这两种方法各有优缺点,适用于不同的场景。 首先,我们来看SAX解析器。SAX...

    android下的pull解析器解析和生成xml文件

    以下是一个简单的示例,展示如何使用Pull解析器解析XML文件: ```java XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput...

    使用pull解析器解析和生成xml文件

    本文将深入探讨如何使用Pull解析器来解析和生成XML文件,特别关注Android环境下的应用。 ### Pull解析器概述 Pull解析器是一种事件驱动型的XML解析器,它允许开发者通过一系列的事件来读取和解析XML文档。与SAX...

    android之Pull解析XML文件

    本文将深入探讨如何在Android中使用Pull解析器来处理XML文件,这是一种高效且节省资源的方式。 Pull解析器是Android提供的一个API,它允许应用程序通过事件驱动的方式解析XML文档。与SAX解析器类似,Pull解析器不...

    Android ReadXmlByPull 使用Pull解析Xml文件.rar

    本教程将详细介绍如何在Android中利用Pull解析器(PullParser)来读取XML文件,这是一种高效且内存友好的方式。 首先,让我们了解什么是Pull解析器。Pull解析器是一种事件驱动的解析模型,它不创建整个XML文档树,...

    使用Android自带的XML解析器PULL解析器简单的解析xml

    下面是一个简单的使用PULL解析器解析XML并显示内容在`TextView`上的步骤: 1. 引入必要的库:在Android项目中,`XmlPullParser`是内置的,无需额外导入库。 2. 创建`XmlPullParser`实例:通常,我们可以使用`...

    android Pull XML文件解析 存取 代码程序

    本篇文章将深入探讨如何在Android中使用Pull解析器进行XML文件的解析和存取。 一、XML解析器简介 在Android中,有两种主要的XML解析方式:SAX(Simple API for XML)和DOM(Document Object Model)。SAX是事件驱动...

    使用Pull解析xml文件

    PULL解析器是Android SDK中内置的一种解析XML的机制,特别适合于资源有限的移动设备。它通过事件驱动的方式解析XML文档,只在需要时读取数据,减少了内存消耗。PULL解析器的操作模式是拉(Pull)而非推(Push),...

    pull解析器通用解析XML与生成XML

    XML Pull解析器在Android开发中广泛使用,尤其是在处理大型XML文件或实时数据流时,其效率和低内存占用是关键优势。掌握XML Pull解析和生成技术对于Android开发者来说是必备技能之一,能够提高应用的性能和用户体验...

    android SAX PULL 解析XML文件 代码 详解

    PULL解析器通过调用`PullParser`对象的`next()`方法,不断拉取下一个事件,直到没有更多的事件为止。这种方式非常适合于简单的XML解析任务,且代码更加简洁。以下是一个基本的PULL解析示例: ```java ...

    Android解析xml(3)---Pull解析

    本篇文章将重点讨论如何在Android中使用Pull解析器(PullParser)来解析XML文件。Pull解析器是一种事件驱动的解析方式,它允许应用程序在解析过程中按需获取XML数据,而不是一次性加载整个文档到内存,这使得处理...

    Android 生成和PULL解析xml

    以下是一个使用PULL解析器解析XML的简单示例: ```java // 创建PULL解析器 XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); // 从文件中...

    Android ReadXmlByPull 使用Pull解析Xml文件.zip

    本教程将详细讲解如何使用Android的Pull解析器来读取XML文件,这是一种高效且内存友好的方式。 XML(eXtensible Markup Language)是一种标记语言,用于描述数据结构和内容。在Android中,有两种主要的XML解析方式...

    android开发之xml文件操作——xml创建和pull解析xml

    本项目主要关注的是XML的创建和使用Pull解析器来解析XML,这是Android系统中处理XML数据的一种高效方法。接下来,我们将详细讨论这两个知识点。 首先,XML(Extensible Markup Language)是一种用于标记数据的语言...

Global site tag (gtag.js) - Google Analytics