android pull解析框架,Android-pull解析

该博客详细展示了如何在Android环境中使用Pull解析器读取assets目录下的person.xml文件,并将内容转化为Person对象列表。同时,它还演示了如何将Person对象集合写回XML文件,涉及到了XML的序列化过程。在解析过程中,遇到START_TAG和END_TAG时,创建并填充Person对象,最终返回Person列表。在序列化时,通过XmlSerializer进行XML文档的构建并写入文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class PersonService {

private Context context;

public PersonService(Context context) {

this.context = context;

}

/**

* 把person.xml的输入流 解析 转化成list集合

* @param filename assets目录下的文件名

* @return

*/

public List getPersons(String filename){

AssetManager manager = context.getAssets();

try {

InputStream is = manager.open(filename);

//在android下使用pull解析xml文件

//1.获取pull解析器的实例

XmlPullParser parser = Xml.newPullParser();

//2.设置解析器的一些参数

parser.setInput(is, "utf-8");

// 获取pull解析器对应的事件类型

int type = parser.getEventType();

Person person = null;

List persons = new ArrayList();

while(type!=XmlPullParser.END_DOCUMENT){

if(type==XmlPullParser.START_TAG){

if("person".equals(parser.getName())){

person = new Person();

int id =Integer.parseInt( parser.getAttributeValue(0));

person.setId(id);

}else if("name".equals(parser.getName())){

String name = parser.nextText();

person.setName(name);

}else if("age".equals(parser.getName())){

int age = Integer.parseInt( parser.nextText());

person.setAge(age);

}

}

if(type==XmlPullParser.END_TAG){

if("person".equals(parser.getName())){

persons.add(person);

person = null;

}

}

type = parser.next();

}

return persons;

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(context, "获取person.xml失败", Toast.LENGTH_SHORT).show();

return null;

}

}

/**

* 把persons集合里面的内容写到xml文件里面

* @param persons person的集合

* @return

*/

public boolean savePersonToXml(List persons){

try {

XmlSerializer serializer = Xml.newSerializer();

// /sdcard/person.xml

// mount unmount 文件系统的权限

File file = new File(Environment.getExternalStorageDirectory(),"person.xml");

FileOutputStream fos = new FileOutputStream(file);

serializer.setOutput(fos, "utf-8");

serializer.startDocument("utf-8", true);

serializer.startTag(null, "persons");

for(Person person:persons){

serializer.startTag(null, "person");

serializer.attribute(null, "id", person.getId()+"");

serializer.startTag(null,"name");

serializer.text(person.getName());

serializer.endTag(null, "name");

serializer.startTag(null,"age");

serializer.text(person.getAge()+"");

serializer.endTag(null, "age");

serializer.endTag(null, "person");

}

serializer.endTag(null, "persons");

serializer.endDocument();

fos.flush();

fos.close();

return true;

} catch (Exception e) {

e.printStackTrace();

return false;

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值