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;
@Override
protected 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下载