您的位置:首页 > 理论基础 > 计算机网络

Android网络编程之pull解析xml

2015-02-19 22:22 555 查看
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,转载请注明出处,欢迎交流讨论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: