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 ...
随机推荐
- Fresco 源码分析(三) Fresco服务端处理(2) Producer具体实现的内容
我们以mProducerFactory.newNetworkFetchProducer()为例,因为这些创建新的producer的方式类似,区别在于是否有包装的处理器,即如果当前处理器中没有正在处理的 ...
- zookeeper理论
第一章 Zookeeper server 1.1 Zookeeper基本原理 1.1.1 Zookeeper的保证 l 顺序性,client的updates请求都会根据它发出的 ...
- C# http 发送post或get请求
/// <summary> /// 向服务器提交XML数据 /// </summary> /// <param name="url">远程访问的 ...
- Xamarin.iOS调试提示需要iOS SDK
Xamarin.iOS调试提示需要iOS SDK 错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xco ...
- jQuery对表单、表格的操作及更多应用(上:表单应用)
内容摘录自锋利的JQuery一书 一.表单应用 1 获取和失去焦点改变样式(P142) $(function(){ $(":input").focus(function(){ // ...
- eBay 消息发送(1)
1.简介 Call Index Doc: http://developer.ebay.com/DevZone/XML/docs/Reference/eBay/index.html 消息发送主要 ...
- 初识API函数
我之前是一个只会编写数值计算的程序的OIer,但我并不甘于这种现状,于是我编写了我的第一个使用API函数的C++程序,开发平台是VS2012: // ConsoleApplication.cpp : ...
- 调用WebServiceWebService提示The maximum string content length quota (8192) has been exceeded while reading XML data的解决办法
在web.config中,bindings节点下,对应的服务名称中,原本可能是自动折叠的“/>”,需要改成手动折叠的</binding>,然后在中间加上<readerQuota ...
- COJ969 WZJ的数据结构(负三十一)
WZJ的数据结构(负三十一) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 A国有两个主基站,供给全国的资源.定义一个主基站 ...
- asp.net 微信企业号办公系统-流程设计--流程步骤设置-策略设置
策略设置包括当前步骤的流转方式,处理人员,退回策略等设置. 流转类型:当前步骤后面有多个步骤时,此类型选择可以决定后续步骤的发送方式. 1.系统控制:由系统根据您在线上设置的流转条件来判断该发送到哪一 ...