Android之使用Pull方式解析与保存XML文件操作

1.XmlPullParser解析XML,解析方式与SAX类似,提供类似的事件触发方式,需要使用parser.next()方式来提取他们,通过Parser.getEventType()方法来取得事件的代码值,解析是在开始时就完成了大部分处理,当某个元素开始的,可以调用Parser.nextText()从XML文件中提取所有的字符数据。

2.Person.xml

<?xml version="1.0" encoding="UTF-8"?> <persons> <person id="23"> <name>liming</name> <age>30</age> </person> <person id="20"> <name>lixiangmei</name> <age>25</age> </person> </persons>

3.XmlPullParser解析XML与保存XML文件

public class PULLPersonParser { //使用PULL技术保存XML文件方法 public static void save(List<Person> persons, Writer writer) throws Throwable { //得到XmlSerializer对象 XmlSerializer serializer = Xml.newSerializer(); //通过写入器接口 serializer.setOutput(writer); //开始文档标记 serializer.startDocument("UTF-8", true); //开始标签persons serializer.startTag(null, "persons"); //开始迭代 for(Person person : persons) { //开始标签person serializer.startTag(null, "person"); //标签person属性 serializer.attribute(null, "id", person.getId().toString()); //子节点,元素name serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); //子节点,元素age serializer.startTag(null, "age"); serializer.text(person.getAge().toString()); serializer.endTag(null, "age"); //结束标签person serializer.endTag(null, "person"); } //结束标签persons serializer.endTag(null, "persons"); //结束文档标记 serializer.endDocument(); writer.flush(); writer.close(); } //采用XmlPullParser来解析XML文件 public static List<Person> getPersons(InputStream inStream) throws Throwable { List<Person> persons = null; Person person = null; //获取一个XmlPullParser XmlPullParser parser = Xml.newPullParser(); //解析文件输入流 parser.setInput(inStream, "UTF-8"); //产生第一个事件 int eventType = parser.getEventType(); //只要不是文档结束事件,就一直循环 while(eventType!=XmlPullParser.END_DOCUMENT) { switch (eventType) { //触发开始文档事件 case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; //触发开始元素事件 case XmlPullParser.START_TAG: //获取解析器当前指向的元素的名称 String name = parser.getName(); if("person".equals(name)) { //通过解析器获取id的元素值,并设置person的id person = new Person(); person.setId(new Integer(parser.getAttributeValue(0))); } if(person!=null) { if("name".equals(name)) { //获取解析器当前指向元素的下一个文本节点的值,会返回 person.setName(parser.nextText()); } if("age".equals(name)) { //获取解析器当前指向元素的下一个文本节点的值,会返回 person.setAge(new Short(parser.nextText())); } } break; //触发结束元素事件 case XmlPullParser.END_TAG: // if("person".equals(parser.getName())) { persons.add(person); person = null; } break; default: break; } eventType = parser.next(); } return persons; } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值