pull解析
封装实体类
public class User {
private String id;
private String uname;
private String phone;
private String mobil;
private String addr;
@Override
public String toString() {
return "User [id=" + id + ", uname=" + uname + ", phone=" + phone
+ ", mobil=" + mobil + ", addr=" + addr + ", email=" + email
+ "]";
}
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getMobil() {
return mobil;
}
public void setMobil(String mobil) {
this.mobil = mobil;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
解析
private void pullParseXml() {
//1.通过Xml的newPullParser方法获取一个对象XmlPullParser
XmlPullParser parser = Xml.newPullParser();
try {
//2.设置要解析的文件
parser.setInput(getAssets().open("contacts.xml"), "utf-8");
boolean isNOTEOF = true;//没有到文件结尾
String tagname = "";//记录节点名称
//3.开始解析文档--返回值是五种事件类型
int event = parser.getEventType();
User u = null;
//6.想办法把解析文档的代码循环起来
while(isNOTEOF){
//4.判断解析文档事件源属于哪一种事件类型
switch (event) {
case XmlPullParser.START_DOCUMENT://文档开始
//初始化动作
userlist = new ArrayList<User>();
break;
case XmlPullParser.START_TAG://节点开始
//获取节点名称
tagname = parser.getName();
if(tagname.equals("user")){
u = new User();
u.setId(parser.getAttributeValue(null, "id"));
u.setUname(parser.getAttributeValue(null, "uname"));
}
break;
case XmlPullParser.TEXT://文本内容
if(tagname.equals("phone")){
//取电话-文本内容
u.setPhone(parser.getText());
}else if(tagname.equals("mobil")){
u.setMobil(parser.getText());
}else if(tagname.equals("addr")){
u.setAddr(parser.getText());
}else if(tagname.equals("email")){
u.setEmail(parser.getText());
}
break;
case XmlPullParser.END_TAG://节点结束
tagname = parser.getName();
if(tagname.equals("user")){
userlist.add(u);
}
//在节点结束时,重新初始化节点名称(以防空节点内容覆盖正常节点文本内容)
tagname = "";
break;
case XmlPullParser.END_DOCUMENT://文档结束
//循环结束的标识,很关键,否则死循环
isNOTEOF = false;
break;
}
//5.接着解析下一行(一定不能忘记,否则程序不会往下执行)
event = parser.next();
}
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}