Android网络编程之pull解析xml

PULL解析器小巧轻便,解析速度快,简单易用,非常适合在Android移动设备中使用,Android系统内部在解析各种XML时也是用PULL解析器,Android官方推荐开发者们使用Pull解析技术。

pull解析的代码步骤

第一步:我们需要先定义一个xml文件(当然也可以是从网络上获取的xml文件)

第二步:创建一个XmlPullParser对象,用于对文件进行解析

第三步:通过parser.setInput()方法,将文件和文件解析器关联起来。

第四步:调用getEventType();方法正式开始解析。

第五步:在while循环中处理xml

具体实现

我在apache http sever(这个可以去apache官网去下载或者直接搜索,我觉得非常好用)临时搭建的服务器内存储了一个test.xml文件。

<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
</note>
准备Http工具类
import android.util.Log;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

/**
 * Created by itxuye on 2015/2/8.
 */
public class HttpUtils {

    HttpUtils() {

    }

    public static String RequestUrl(String Url) {
    String xml_data = "";
    try {
    HttpClient httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet(Url);
    HttpResponse httpResponse = httpClient.execute(httpGet);
    if (httpResponse.getStatusLine().getStatusCode() == 200) {
        //请求响应成功
        HttpEntity httpEntity = httpResponse.getEntity();
        xml_data = EntityUtils.toString(httpEntity);
        return xml_data;
        }
    } catch (Exception ex) {
        Log.i("MainActivity", "读取不到");
    }
    return null;
    }
}

创建解析方法

private void parseXMLWithPull(String xml_data_) {
        try {
    //创建XmlPullParser,有两种方式
    //方式一:使用工厂类XmlPullParserFactory
    XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
    XmlPullParser xmlPullParser = factory.newPullParser();

    //方式二:使用Android提供的实用工具类android.util.Xml
    //XmlPullParser xmlPullParser = Xml.newPullParser();

    // 通过parser.setInput()方法,将文件和文件解析器关联起来。
    xmlPullParser.setInput(new StringReader(xml_data_));

    //产生第一个事件
    int eventType = xmlPullParser.getEventType();

    String to = "";
    String from = "";
    String heading = "";


    while (eventType != XmlPullParser.END_DOCUMENT) {
        String nodename = xmlPullParser.getName();
        switch (eventType) {

        //判断当前事件是否是标签元素开始事件
        case XmlPullParser.START_TAG: {
            if ("to".equals(nodename)) {
                to = xmlPullParser.nextText();
            } else if ("from".equals(nodename)) {
                from = xmlPullParser.nextText();
            } else if ("heading".equals(nodename)) {
                heading = xmlPullParser.nextText();
            }
            break;
        }
        case XmlPullParser.END_TAG: {
            if ("note".equals(nodename)) {
                Log.i(TAG, "to" + to);
                Log.i(TAG, "from" + from);
                Log.i(TAG, "heading" + heading);

            }
            break;
        }
        default:
            break;
    }
    //进入下一个元素并触发相应事件
    eventType = xmlPullParser.next();
            }
        } catch (Exception ex) {

            Log.i("MainActivity", "解析错误");
        }
}

输出结果:

   1431-1448/com.itxuye.Pull I/MainActivity﹕ toGeorge  

   1431-1448/com.itxuye.Pull I/MainActivity﹕ fromJohn  

   1431-1448/com.itxuye.Pull I/MainActivity﹕ headingReminder   
参考阅读:

《安卓 第一行代码》

代码完整地址:

https://github.com/itxuye/Pull_xml

本文永久链接http://itxuye.com/android-network-pull-xml.html,转载请注明出处,欢迎交流讨论。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值