首页 > 代码库 > Android中的XML的Pull解析与生成
Android中的XML的Pull解析与生成
1、Pull解析简介
Pull解析是Android系统内置的一种对XML的解析方式,它与SAX解析方式基本一致,都包括开始元素和结束元素事件,使用parser.next()可以进入下一个元素并触发相应事件。但是它们不同的是,SAX的事件驱动是回调相应方法,需要提供回调的方法,而在SAX内部自动调用相应的方法。而Pull解析器并没有强制要求提供触发的方法。因为它触发的事件并不是一个方法,而是一个数字,至于触发的时间要不要处理,这个可以由程序员自己来决定。2、五个常量事件
Pull解析器返回的是一个数字,类似于一个信号。我们在Android的网络处理中,也常常使用数字作为处理的标识,比如我们常用的Handler机制。Pull解析器为我们定义了五个常量,如下:XmlPullParser.START_DOCUMENT;(开始对文档的解析) XmlPullParser.START_TAG;(开始对元素的解析) XmlPullParser.TEXT;(解析文本) XmlPullParser.END_TAG;(开始对元素的解析) XmlPullParser.END_DOCUMENT;(结束对文档的解析)最常用的方法是:
parser.getEventType(); // 触发事件,开始解析 parser.next(); // 解析下一个事件 parser.getAttributeValue(); //获得相应属性的值
3、解析XML文档
步骤不多说,序列化,得到方法,设置参数,开始解析。示例代码如下:
public static List<Person> getPersons(InputStream inStream) throws Exception{ Person person = null; List<Person> persons = null; XmlPullParser pullParser = Xml.newPullParser(); pullParser.setInput(inStream, "UTF-8"); int event = pullParser.getEventType();//触发第一个事件 while(event!=XmlPullParser.END_DOCUMENT){ switch (event) { case XmlPullParser.START_DOCUMENT: persons = new ArrayList<Person>(); break; case XmlPullParser.START_TAG: if("person".equals(pullParser.getName())){ int id = new Integer(pullParser.getAttributeValue(0)); person = new Person(); person.setId(id); } if(person!=null){ if("name".equals(pullParser.getName())){ person.setName(pullParser.nextText()); } if("age".equals(pullParser.getName())){ person.setAge(new Short(pullParser.nextText())); } } break; case XmlPullParser.END_TAG: if("person".equals(pullParser.getName())){ persons.add(person); person = null; } break; } event = pullParser.next(); } return persons; }
4、生成XML文件
在SAX对XML文档的解析中,我们提到过,SAX解析不支持文件的修改、生成,那么Pull解析呢?Pull解析是支持对文件的修改的。
实现XML的序列化:
XmlSerializer serializer = Xml.newSerializer();
指定输出接口信息:
serializer.setOutput(outStream, "UTF-8"); serializer.startDocument("UTF-8", true);
标签的开始和结束:
serializer.startTag(null, "persons"); serializer.endTag(null, "persons");
解析代码如下:
for(Person person : persons){ serializer.startTag(null, "person"); serializer.attribute(null, "id", person.getId().toString()); serializer.startTag(null, "name"); serializer.text(person.getName()); serializer.endTag(null, "name"); serializer.startTag(null, "age"); serializer.text(person.getAge().toString()); serializer.endTag(null, "age"); serializer.endTag(null, "person"); }
记得关闭流文件:
outStream.flush(); outStream.close();
Android中的XML的Pull解析与生成
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。