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项目报错

    经常需要将一个项目,导出,然后发给同事,或者是自己用另一个Eclipse工具打开. 这时,导入项目后,就会出现各种各样的问题.大牛笔记:www.weixuehao.com 代码相同,环境不同,主要是修 ...

  2. Linux下Gcc生成和使用静态库和动态库详解

    参考文章:http://blog.chinaunix.net/uid-23592843-id-223539.html 一.基本概念 1.1什么是库 在windows平台和linux平台下都大量存在着库 ...

  3. 在.NET下使用C# 控制Windows系统音量

    C#开发Windows应用程序中经常需要去控制系统的音量,分两种方式: 1.使用Win Api控制 2.使用C++ dll控制 Win Api控制: 使用user32.dll和winmm.dll都可以 ...

  4. STL 常见操作

    stl的操作不是很熟练, 记录一下 1.vector: 排序: sort(vc.begin(),vc.end()); 去重: sort(vc.begin(),vc.end()); num.erase( ...

  5. zookeeper理论

    第一章 Zookeeper server 1.1  Zookeeper基本原理 1.1.1    Zookeeper的保证 l         顺序性,client的updates请求都会根据它发出的 ...

  6. MAXIMO系统 java webservice 中PDA移动应用系统开发

    MAXIMO系统 java webservice 中PDA移动应用系统开发  平时经常用的wince PDA手持设备调用c#写的webservice, 当然PDA也可以调用java webservic ...

  7. Oracle TNS配置浅析

    1. 什么是TNS? TNS是Oracle Net的一部分,专门用来管理和配置Oracle数据库和客户端连接的一个工具,在大多数情况下客户端和数据库要通讯,必须配置TNS,当然在少数情况下,不用配置T ...

  8. spring实战一:装配bean之注入Bean属性

    内容参考自spring in action一书. 创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质. 1. 创建spring配置 spring是一个基于容器的框架.如果没有配置spri ...

  9. PrintDocument 实践

    简单使用,直接上代码 1.设置打印页大小 和页边距 this.printDocument1.DefaultPageSettings = new System.Drawing.Printing.Page ...

  10. Sky数[HDU2097]

    Sky数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...