Pull解析器学习
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解析器学习的更多相关文章
- Android(java)学习笔记187:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- Android(java)学习笔记130:Android中操作XML数据(使用Pull解析器)
1. Pull解析器的运行方式与 SAX 解析器相似.它提供了类似的事件,如:开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件.跟SAX不同的是, Pull解析器 ...
- 安卓使用pull解析器解析XML文件
学习一下: public class MainActivity extends Activity { List<City> cityList; @Override protected vo ...
- pull解析器: 反序列化与序列化
pull解析器:反序列化 读取xml文件来获取一个对象的数据 import java.io.FileInputStream; import java.io.IOException; import ja ...
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name= ...
- 15_采用Pull解析器解析和生成XML内容
java还提供SAX和DOM用于解析XML Android还集成了Pull解析器——推荐 package cn.itcast.service; import java.io.InputStream; ...
- 使用Pull解析器生成XML文件和读取xml文件
有些时候,我们需要生成一个XML文件,生成XML文件的方法有很多,如:可以只使用一个StringBuilder组拼XML内容,然后把内容写入到文件中:或者使用DOM API生成XML文件,或者也可以使 ...
- 通过pull解析器操作安卓的xml
通过pull解析器操作安卓的xml 例子定义了一个javabean用于存放上面解析出来的xml内容, 这个javabean为Person,代码请见本页下面备注: =================== ...
- 用PULL解析器解析XML文件
第一种方式(简洁,直接用pullparser.nextText()来返回下一个String类型的值): 1 package lee.service; 2 3 import java.io.InputS ...
随机推荐
- 干货分享:IBM StorwizeV7000部署与运维
http://storage.it168.com/a2014/1211/1689/000001689526_3.shtml
- linux下php增加curl扩展,生成curl.so文件
进入php源代码目录 cd /php5.6.9/ext/curl 执行生成so文件编译模式 /usr/local/php/bin/phpize 编译curl扩展 ./configure --with- ...
- Codeforces 161D Distance in Tree(树的点分治)
题目大概是,给一棵树,统计距离为k的点对数. 不会DP啊..点分治的思路比较直观,啪啪啪敲完然后AC了.具体来说是这样的: 树上任何两点的路径都可以看成是一条过某棵子树根的路径,即任何一条路径都可以由 ...
- HDU1116 Play on Words(有向图欧拉通路)
我把单词当作点,然后这样其实是不对的,这样就要判定是否是哈密顿通路.. 这题应该把单词的首尾单词当作点,而单词本身就是边,那样就是判定欧拉通路了. 有向图包含欧拉通路的充要条件是:首先基图连通,然后是 ...
- 在线代码格式化,在线JSON校验格式化
在线代码格式化 http://tool.oschina.net/codeformat/json 在线JSON校验格式化 http://www.kjson.com/ 两个好用工具
- topcoder 594 DIV2 foxandclassroom
暴力枚举 1 #include <iostream> #include <vector> #include <string> using namespace std ...
- Float Equal Problem
Understand limitations of floating point representations.Never check for equality with ==. Instead, ...
- 【POJ】2954 Triangle(pick定理)
http://poj.org/problem?id=2954 表示我交了20+次... 为什么呢?因为多组数据我是这样判断的:da=sum{a[i].x+a[i].y},然后!da就表示没有数据了QA ...
- 【BZOJ】3339: Rmq Problem & 3585: mex(线段树+特殊的技巧)
http://www.lydsy.com/JudgeOnline/problem.php?id=3585 好神的题. 但是!!!!!!!!!!!!!!我线段树现在要开8倍空间才能过!!!!!!!!!! ...
- 【POJ】1062 昂贵的聘礼(spfa)
http://poj.org/problem?id=1062 此题一开始果断想到暴力.. 但是n<=100果断不行. 一看题解,噗!最短路... 构图很巧妙. 每一个物品对应的所需物品相当于一个 ...