Pull解析

原理:

类似与sax解析,是基于事件的xml解析方式。

Pull解析器刚开始定位在文档的开始,pull解析器可以获取到当前事件类型,根据事件类型做相应的操作,通过解析器的next方法将游标定位到下一个节点位置。

我们可以通过不同节点事件类型去获取到xml文件中的数据封装到bean对象,将bean对象封装到集合,完成相应的业务需求。

 

代码实例:

1.获取pull解析器对象

2.获取节点事件类型

3.通过循环遍历xml文件,如果节点时间类型不是文档末尾时,不停的进行向下遍历。

4.遍历过程中将获取到的数据封装到bean实体,最终封装到集合中,作为结果返回给调用者。

 

Xml文件

<?xml version="1.0" encoding="UTF-8"?>

<citys>

    <city id='1'>

<name>北京</name>

<weather></weather>

<wind>7级</wind>

<temp>25</temp>        

    </city>

    

    <city id='2'>

<name>天津</name>

<weather></weather>

<wind>5级</wind>

<temp>20</temp>        

    </city>

    

    <city id='1'>

<name>南京</name>

<weather></weather>

<wind>3级</wind>

<temp>30</temp>        

    </city>

    

</citys>

 

解析xml文件

 

public List<CityInfo> pullParse() throws Exception{

//定义集合用来存放city实体

List<CityInfo> cityInfos = null;

//获取xml解析器对象

XmlPullParser parser = Xml.newPullParser();

 

//初始化参数

InputStream inputStream = StoreData.class.getClassLoader().getResourceAsStream("weather.xml");

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

//获取节点事件类型

int type = parser.getEventType();

//定义临时实体,用来存放获取到的实体信息,并将每一个实体存储到集合中去

CityInfo cityInfo = null;

while(type!=XmlPullParser.END_DOCUMENT) {//如果当前节点事件类型不是文档结束

switch(type) {

case XmlPullParser.START_TAG:

if("cityes".equals(parser.getName())) {//如果节点名称是cityes说明获取到根节点,创建集合对象准备存储bean实体

cityInfos = new ArrayList<CityInfo>();

}else if("city".equals(parser.getName())){//如果节点名称是city说明获取到某个城市节点,为定义的临时对象赋值

 

}else if("weather".equals(parser.getName())) {//如果读取到weather节点,设置citiyInfo的weather属性

 

}

break;

case XmlPullParser.END_TAG:

if("city".equals(parser.getName())) {//如果读取到city结束标签,将cityInfo对象添加到集合中

cityInfos.add(cityInfo);

}

break;

 

}

 

type = parser.next();

}

//解析完成后将集合返回给调用者

return cityInfos;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值