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 ...
随机推荐
- Linux系统如何查看CPU型号等
有时候在下载jdk或其它用图的时候,可能需要查看一下这个cpu的型号 [root@subvm ~]# less /proc/cpuinfo |grep modelmodel : 4 ...
- 查看Linus中自带的jdk ,设置JAVA_HOME
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用Red hat是32位的,没有现成的32位的,敲java , 发现本机有java ,就找了一下其位置 找到了jdk-1.6.0 ...
- Instruments_Activity Monitor使用入门
Activity Monitor,官方解释为:(活动监视器)即实时显示CPU.内存和网络的使用情况,记录由虚拟内存大小测量的系统负载.用一句大白话来说,Activity Monitor类似Window ...
- linux之间文件传输问题
如果linux服务器使用了秘钥登陆,可以先关闭秘钥登陆 http://blog.chinaunix.net/uid-23634108-id-2393471.html 然后:scp -P 端口号 no ...
- 在Android中将子View的坐标转换为父View的坐标
在Android中,我们有时候可能会将子View的坐标转换为父View中的坐标.感觉很有用,分享给大家. 在Launcher中有这么一段代码可以完成这项工作. public float getDes ...
- ssdb使用
安装 wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip unzip master cd ssd ...
- WAP网页输入框的默认键盘类型控制
最近有用户反映手机网的输入框不够人性化,比如手机号.卡号输入框应该默认显示数字键盘,邮箱输入框应该默认显示邮箱键盘. 百度上对这样的资料介绍很多,基本上都和这个页面是一个意思 http://www.w ...
- ☆☆在Eclipse中编译NDK的so文件(普通安卓项目转换为NDK项目的设定)
1 将Native的编译链接配置加入项目中 2 进行编译 3 项目支持Native后,在首尾分别新增了两个编译过程
- 误删除了mssql的表。 使用命令:drop table xxxx
使用ApexSQL Recover工具进行恢复.教程如下: http://solutioncenter.apexsql.com/zh/%E6%B2%A1%E6%9C%89%E5%A4%87%E4%BB ...
- 调整linux的时钟
想把linux时钟调整的正常了. 网上找了找资料,找到了同步办法: http://blog.51yip.com/server/1474.html 即使用: sudo yum install ntp s ...