1,

package com.service;

import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import org.xmlpull.v1.XmlSerializer; import android.util.Xml; import com.model.Person; /**
* 解析基类
* @author HJ
*
*/
public class BaseParser { /** Pull解析器解析XML文件数据
* @param xml 待解析数据以InputStream方式传入
* @return
* @throws Exception
*/
public List<Person> getPersons(InputStream xml)throws Exception{
List<Person> persons = null;
Person person = null;
XmlPullParser pull = Xml.newPullParser();
//XmlPullParser pull = XmlPullParserFactory.newInstance().newPullParser(); //通过XMLPullParserFactory工厂类获取Pull解析器
pull.setInput(xml, "UTF-8");//为pull解析器设置需要解析的xml数据
int event = pull.getEventType();
while(event!=XmlPullParser.END_DOCUMENT){
switch (event) {
case XmlPullParser.START_DOCUMENT:
persons = new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if ("person".equals(pull.getName())) {
person = new Person();
String IDcard = pull.getAttributeValue(0);
person.setIDCard(IDcard);
}
if ("name".equals(pull.getName())) {
String name = pull.nextText();
person.setName(name);
}
if ("sex".equals(pull.getName())) {
String sex = pull.nextText();
person.setSex(sex);
}
if ("address".equals(pull.getName())) {
String address = pull.nextText();
person.setAddress(address);
}
break;
case XmlPullParser.END_TAG:
if ("person".equals(pull.getName())) {
persons.add(person);
person = null;
}
break;
} event = pull.next();
}
return persons;
}
/**
* 对象方式保存数据到XML文件
* @param persons 待保存数据集合
* @param out 输出流
* @throws Exception
*/
public void saveToXML(List<Person> persons,OutputStream out)throws Exception{
XmlSerializer serializer = Xml.newSerializer();
serializer.setOutput(out, "UTF-8");
serializer.startDocument("UTF-8", true);
serializer.startTag(null, "persons");
for(Person person:persons){
serializer.startTag(null,"person");
serializer.attribute(null,"IDCard", person.getIDCard());
//name 节点
serializer.startTag(null,"name");
serializer.text(person.getName());
serializer.endTag(null, "name");
//sex 节点
serializer.startTag(null, "sex");
serializer.text(person.getSex());
serializer.endTag(null, "sex");
//address 节点
serializer.startTag(null, "address");
serializer.text(person.getAddress());
serializer.endTag(null, "address"); serializer.endTag(null, "person");
}
serializer.endTag(null,"persons");
serializer.endDocument();
out.flush();
out.close();
}
//
}
2,persons.xml <?xml version="1.0" encoding="UTF-8"?>
<persons>
<person IDcard="215x">
<name>Mr.Chiang</name>
<sex>Gentleman</sex>
<address>China</address>
</person>
<person IDcard="9527">
<name>Mrs.Chen</name>
<sex>Lady</sex>
<address>France</address>
</person>
</persons>
3,测试类 package com.emolay.test; import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.List; import com.model.Person;
import com.service.BaseParser; import android.test.AndroidTestCase;
import android.util.Log; public class BaseParserTest extends AndroidTestCase {
private static final String TAG = "BaseParserTest"; /**
* test getPersons method
*
* @throws Exception
*/
public void testGetPersons() throws Exception {
InputStream xml = this.getClass().getClassLoader()
.getResourceAsStream("persons.xml");
BaseParser baseParser = new BaseParser();
List<Person> persons = baseParser.getPersons(xml);
for (Person p : persons) {
Log.i(TAG, p.getIDCard());
}
} /**
* test saveToXML method
*
* @throws Exception
*/
public void testSaveToXML() throws Exception {
InputStream xml = this.getClass().getClassLoader()
.getResourceAsStream("persons.xml");
BaseParser baseParser = new BaseParser();
List<Person> persons = baseParser.getPersons(xml);
File fileXML = new File(getContext().getFilesDir(), "NewPersons.xml");
FileOutputStream out = new FileOutputStream(fileXML);
baseParser.saveToXML(persons, out);
}
}

Pull解析器学习的更多相关文章

  1. Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  2. Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)

    1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...

  3. 安卓使用pull解析器解析XML文件

    学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...

  4. pull解析器: 反序列化与序列化

    pull解析器:反序列化 读取xml文件来获取一个对象的数据 import java.io.FileInputStream; import java.io.IOException; import ja ...

  5. 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

    1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...

  6. 15_采用Pull解析器解析和生成XML内容

    java还提供SAX和DOM用于解析XML Android还集成了Pull解析器——推荐 package cn.itcast.service; import java.io.InputStream; ...

  7. 使用Pull解析器生成XML文件和读取xml文件

    有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...

  8. 通过pull解析器操作安卓的xml

    通过pull解析器操作安卓的xml 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注: =================== ...

  9. 用PULL解析器解析XML文件

    第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...

随机推荐

  1. java基础知识回顾之java Thread类学习(十一)--join方法的理解

    以下面例子说明下面的源码:main 线程 和 A线程,A线程是main线程创建并且启动的,main线程优先级比较高,正在执行:这个时候main线程调用A.join()之后,main线程一直等待,直到A ...

  2. Linux 内核中断内幕

    转自:http://www.ibm.com/developerworks/cn/linux/l-cn-linuxkernelint/index.html#resources Linux 内核中断内幕 ...

  3. Winform 基础知识 之文件夹操作

    using System.IO; /// <summary> /// 删除文件夹下所有文件 /// </summary> /// <param name="di ...

  4. php 三元运算符使用说明和写法

    PHP三元运算的2种写法代码实例 首先,我们现在看一个简单的例子: 代码如下: <?php //写法一: $a = 2; ($a == 1) ? $test = "我们" : ...

  5. SQLServer2005利用维护计划自动备份数据库

    经常性忘了给数据库备份,结果当数据库发生问题的时候,才发现备份是1个月以前的,那个后悔与懊恼还加惭愧啊,别提有对难受了.要认为的记住去备份比较难,每天事情又那么多,所以有了这个自动备份就不用愁了.先拷 ...

  6. Spark Streaming中向flume拉取数据

    在这里看到的解决方法 https://issues.apache.org/jira/browse/SPARK-1729 请是个人理解,有问题请大家留言. 其实本身flume是不支持像KAFKA一样的发 ...

  7. JavaScript中两个感叹号(!!)的作用是什么?

    !!一般用来将后面的表达式强制转换为布尔类型的数据(boolean),也就是只能是true或者false. 看这么个例子: var a: var b=!!a; a默认是undefined.!a是tru ...

  8. POJ3321 Apple Tree(DFS序)

    题目,是对一颗树,单点修改.子树查询.典型的dfs序入门题. DFS序可以将一颗树与子树们表示为一个连续的区间,然后用线段树来维护:感觉算是树链剖分的一种吧,和轻重链剖分不同的是这是对子树进行剖分的. ...

  9. ibatis 灵活的配置文件

    <select id="selectAllMmsRepairBySth" parameterClass="hashmap" resultMap=" ...

  10. USACO 5.4 Telecowmunication(最大流+枚举)

    面对最小割之类的题目,完全木想法... 枚举+最大流..复杂度很大了...居然很快的就过了.. /* ID: cuizhe LANG: C++ TASK: telecow */ #include &l ...