Android PUll解析xml 格式数据

本文详细介绍了在Android中使用Pull解析方式处理XML数据的具体步骤。从实例化XmlPullParserFactory到解析XML节点,包括如何获取节点名称及内容,通过具体代码展示了整个解析过程。

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

在Android中,XML数据格式的解析主要有三种方式:Pull 解析、SAX解析和DOM解析。

在这里我来使用一下第一种解析方式。

Pull 解析方式是比较常用的一种,Android提供了一个类:XmlPullParserFactory ,在这里进行了一系列的数据解析操作。

我们可以直接使用方法:

第一步: 实例类对象 XmlPullParserFactory :  

XmlPullParserFactory factory = XmlPullParserFactory.newInstance();

第二步:通过类对 XmlPullParser  进一步实例化:  

XmlPullParser xmlPullParser = factory.newPullParser();

第三步:将获取出来的网络xml格式的数据类型设置进去:

xmlPullParser.setInput(new StringReader(xmlData));

第四步:得到当前解析的事件:

int eventType = xmlPullParser.getEventType();

第五步:对数据进行解析:

使用循环解析数据:

while (eventType!=XmlPullParser.END_DOCUMENT){   //表示当前解析工作还没有结束,就继续往下解析数据
String nodename = xmlPullParser.getName();  // 通过对象获取得到当前的一个节点的名字

String id ="";
String name ="";

switch (eventType){
case XmlPullParser.START_TAG: //开始解析某个节点
if ("id".equals(nodename)){               //如果发现ID和当前节点名相同,就调用nextText();方法来获取节点内具体内容。
    id = xmlPullParser.nextText();
}else  if("name".equals(nodename)){
    name = xmlPullParser.nextText();      //如果发现name和当前节点名相同,就调用nextText();方法来获取节点内具体内容。
} 

break;

case XmlPullParser.END_TAG:        //当解析完成一个app 节点后,得到解析的数据
if ("app".equals(nodename)){
Log.d("lsb","id"+id);
Log.d("lsb","name"+name);
}

   break;

default :

break;

  }

eventType = xmlPullParser.next();

}

 

 

 

 

封装了一个方法方便调用:

 

private void xmlPull(String xmldata){
    try {
        XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
        XmlPullParser xmlPullParser = factory.newPullParser();
        xmlPullParser.setInput(new StringReader(xmldata));
        int eventType = xmlPullParser.getEventType();
        String id ="";
        String name ="";
        while (eventType!=XmlPullParser.END_DOCUMENT){
            String nodename = xmlPullParser.getName();
            switch (eventType){
                case XmlPullParser.START_TAG: //開始解析某個節點
                    if ("id".equals(nodename)){
                        id = xmlPullParser.nextText();
                    }else if ("name".equals(nodename)){
                        name = xmlPullParser.nextText();
                    }
                    break;
                    case XmlPullParser.END_TAG://完成某個節點
                        if ("app".equals(nodename)){
                        Log.d("lsb","id"+id);
                        Log.d("lsb","name"+name);
                        }
                        break;
                        default:
                            break;
            }
            eventType = xmlPullParser.next();
        }
    } catch (XmlPullParserException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值