AndroidXML解析之Pull

Pull 解析器的运行方式与 SAX 解析器相似。它提供了类似的事件,如: 开始元素和结束元素事件,使用 parser.next() 可以进入下一个元素并触发相应事件。跟 SAX 不同的 是, Pull 解析器产生的事件是一个数字,而非方法,因此可以使用一个 switch 对感兴趣的事件 进行处理。当元素开始解析时,调用 parser.nextText() 方法可以获取下一个 Text 类型节点的值。

例如解析:person.xml放到src目录下可以使用类装载器载入文件
首先根据xml文件的内容写一个person javabean 和xmlserver 的业务bean
以下是xmlserveryewbean 的解释:
因为xml的person节点有很多个所以方法的返回类型是一个集合(List<Person>)
方法:public List<Person> getPersons(InputStream xml) throws Exception
1,首先需要一个pull解析器:android自带的方法获取一个解析器 XmlPullParser parser=Xml.newPullParser();
2,以流的形式将xml文件载入 parser.setInput(xml,"utf-8");
3,开始解析
<?xml version="1.0" encoding="UTF-8"?>是文档开始
所以:int event=parser.getEvenType(); 
根据判断event的结果 而作出不同的动作 看主要代码:

public static List<Person> getPersons(InputStream is)throws Exception{
List<Person> persons=null;
Person person=null;
  1. XmlPullParser parser=Xml.newPullParser();
  2. parser.setInput(is , "UTF-8");
  3. int event=parser.getEventType();
  4. while(event!= XmlPullParser.END_DOCUMENT){
switch(event){
case XmlPullParser.START_DOCUMENT:
persons=new ArrayList<Person>();
break;
case XmlPullParser.START_TAG:
if("person".equals(parser.getName())){
Integer personId=new Integer(parser.getAttributeValue(0));
person=new Person();
person.setId(personId);
}else if("name".equals(parser.getName())){
String personName=parser.nextText();
person.setName(personName);
}else if("age".equals(parser.getName()))
person.setAge(new Short(parser.nextText()));
break;
case XmlPullParser.END_TAG:
if("person".equals(parser.getName())){
persons.add(person);
person=null;
}
break;
}

event=parser.next();
}
return persons;
}
 解析一下:XmlPullParser.START_DOCUMENT表示开始文档事件
XmlPullParser.START_TAG: 开始标签
XmlPullParser.END_TAG:结束标签
parser.getName()获取节点的名称
parser.nextText();获取下一个text类型的节点
parser.getAttributeValue(0));获取属性值
event=parser.next();继续下一个元素







Pull输出xml步骤
XmlPullParseFactory factory=XmlPullParseFactory .newInstance();
Xmlserializer xs=factory.newSerializer();
xs.setOutput(OutPutStream,"UTF-8");
xs.startDocument("UTF-8",true);
xs.startTag(null,"tagName ");//开始标签
xs.endTag(null,"tagName");//结束对应的标签
xs.endDocument();
xs.flush();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值