Android开发之使用pull解析xml文件

来源:互联网 发布:100本网络禁书在线阅读 编辑:程序博客网 时间:2024/05/16 08:45

XML在Android中是非常常见用来保存数据的文件,解析的方法也很多,如:DOM、SAX、PULL,其中PULL是Android自带的解析XML方法

DOM:是一次性加载完,生成树状结构,但消耗内存较大,如果这个xml文件比较大就不适合使用DOM来解析

SAX:是基于事件的方式,边加载边解析,效率较高,但解析过不能倒退

PULL:跟ASX有点类似,也是基于事件

程序目录结构



使用pull解析

package com.example.xmlpullparserdemo.service;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import android.util.Xml;import com.example.xmlpullparserdemo.domain.UserInfo;public class UserService {/** * 使用pull解析xml文件 *  * @param is * @return */public static List<UserInfo> getUserInfos(InputStream is) {try {XmlPullParser xmlPullParser = Xml.newPullParser();// 初始化解析器xmlPullParser.setInput(is, "utf-8");List<UserInfo> userInfos = null;UserInfo userInfo = null;int type = xmlPullParser.getEventType();while (type != XmlPullParser.END_DOCUMENT) {switch (type) {case XmlPullParser.START_TAG: // 开始解析标签// 根标签if ("users".equals(xmlPullParser.getName())) {userInfos = new ArrayList<UserInfo>();} else if ("user".equals(xmlPullParser.getName())) {userInfo = new UserInfo();String id = xmlPullParser.getAttributeValue(0);userInfo.setId(Integer.parseInt(id));} else if ("name".equals(xmlPullParser.getName())) {String name = xmlPullParser.nextText();userInfo.setName(name);} else if ("age".equals(xmlPullParser.getName())) {String age = xmlPullParser.nextText();userInfo.setAge(Integer.parseInt(age));} else if ("sex".equals(xmlPullParser.getName())) {String sex = xmlPullParser.nextText();userInfo.setSex(sex);} else if ("brithday".equals(xmlPullParser.getName())) {String brithday = xmlPullParser.nextText();userInfo.setBrithday(Integer.parseInt(brithday));}break;case XmlPullParser.END_TAG:if ("user".equals(xmlPullParser.getName())) {userInfos.add(userInfo);userInfo = null;}break;default:break;}type = xmlPullParser.next(); // 获取下一个节点}return userInfos;} catch (Exception e) {// TODO: handle exception}return null;}}

主Activity类

package com.example.xmlpullparserdemo;import java.util.List;import com.example.xmlpullparserdemo.domain.UserInfo;import com.example.xmlpullparserdemo.service.UserService;import android.os.Bundle;import android.widget.TextView;import android.app.Activity;public class MainActivity extends Activity {private TextView text;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);text = (TextView)findViewById(R.id.text);List<UserInfo> infos = UserService.getUserInfos(MainActivity.class.getClassLoader().getResourceAsStream("backup.xml"));System.out.println("---onCreate");StringBuffer sp = new StringBuffer();for(UserInfo info : infos){System.out.println(info.toString());sp.append(info.toString());sp.append("\n");}text.setText(sp.toString());}}

得到的结果



Demo下载

点击打开链接





原创粉丝点击