- 浏览: 196790 次
- 性别:
- 来自: 南京
文章分类
最新评论
-
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 1298android数据库其实使用的不多,dhroid框架中的 ... -
dhroid ioc模块对 加密混淆问题
2014-04-14 12:52 911大家应该已经看过ioc ... -
NetJSONAdapter 网络化的adapter(高效) -dhroid文档
2014-04-04 12:15 837关于adapter 我想对于大家来说已经不陌生了,基本应用 ... -
DhNet 网络http工具(带缓存功能哦) -dhroid文档
2014-03-24 13:36 1386网络请求是大多数应用不可获取的一部分,曾经和一个其他公司的 ... -
eventbus 事件总线-dhroid文档
2014-03-23 11:47 1201你听过onClick 事件,onItemClick 事件, ... -
ioc基础(视图,资源,assert注入)-dhroid文档
2014-03-21 12:59 813上一节 Android 极速开发框架 dhroid来了 ... -
ioc高级(接口,对象注入)-dhroid文档
2014-03-21 13:04 1076前一章 ioc基础( ... -
IOC容器详解(想晋升的进来)---dhroid框架教教程(一)
2014-03-20 10:30 935控制反转(Inversion of Control,英文缩写 ... -
Android 极速开发框架 dhroid来了(提供demo)
2014-03-19 17:24 1322我们公司内部使用的商业级android开发框架dhr ... -
HttpClient的3种超时说明
2013-03-14 11:05 836/* 从连接池中取连接的超时时间 */ConnManag ... -
MeasureSpec介绍及使用详解
2013-01-24 21:21 721一个MeasureSpec封装了父 ... -
Android学习——TextView 设置中划线 下划线
2012-10-31 14:42 3418android:textAppearance ... -
ListView与其中的Button,EditText,RatingBar等widget的click事件
2012-10-26 14:48 800在<RelativeLayout>中 an ... -
在线词典API
2012-09-09 19:34 676QQ词典 http://dict.qq.com/dic ... -
android Uri获取真实路径转换成File的方法
2012-08-23 12:40 3015data.getData()返回的 ... -
Java之WeakReference与SoftReference使用讲解
2012-08-22 09:46 634如果你想写一个 Java 程序,观察某对象什么时候会被垃圾收集 ... -
Android自定义捕获Application全局异常
2012-08-21 17:24 1134package qianlong.qlmobile ... -
android 缩放图片与内存溢出
2012-08-03 09:43 1140常用的Android版缩放图片代码: ContentRes ... -
获取手机设备方向
2012-08-03 09:33 1426@Override public void onS ... -
activity四种启动模式
2012-08-03 09:30 765Activity 有四种加载模式 [1] standa ...
相关推荐
Android解析xml(3)---Pull解析
android解析xml文件的方式--PULL.pdf
android xml pull解析示例,自己mark下,备忘
XML解析、XML生成工具,灵活好用的XML解析器、封装接口简单易用
pull解析和生成xml文件,使用pull解析本地的xml文件,并且生成了一个不同格式的新的xml文件
Android 生成和PULL解析xml,生成的例子和PULL解析的例子,很详细。。
XML文件的解析--libxml库函数解释
android xml 解析 生成xml sax pull dom
Android网络下的XML解析和生成代码
Android提高第七篇之XML解析与生成.docx
pull解析xml文件,和sax和dom一样 都可以脱离android单独使用,pull和sax的原理一样,不一样的地方是pull读取xml文件后调用方法返回的是数字, 读取到xml的声明返回数字0 START_DOCUMENT; 读取到xml的结束返回数字1 ...
一个eclipse工程包含如何使用android中自带的xml解析器pull,解析和生成xml文件
Android解析xml(2)---DOM解析
在Android中,使用SAX和PULL解析XML,本项目中以解析天气预报为例。 详情见博客:http://blog.csdn.net/yalin18/article/details/7437752
Android网络编程之Pull解析XML文件~
NULL 博文链接:https://justsee.iteye.com/blog/930603
Android利用pull生成xml文件
Android中采用Pull解析器读取和生成xml内容案例...
Mini-xml是一个小型的开源的XML解析器,采用 C 语言开发。该解析器最大的特点就是小型、无须依赖其他类库,可用于嵌入式开发过程中
利用android中自带的pull解析器解析和生成xml片段。