使用xmlpull解析xml
16lz
2021-01-26
在上文中介绍了使用sax方式解析xml,这里介绍下在Android中极力推荐的xmlpull方式解析xml。xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库。
环境:
kxml2-2.3.0.jar
xmlpull_1_1_3_4c.jar
以上两个jar分别从以下网站下载:
http://www.xmlpull.org/ xmlpull
http://kxml.sourceforge.net/ kxml
xml文件:student.xml
<?xml version="1.0" encoding="UTF-8"?><root><student id="1" group="1"><name>张三</name><sex>男</sex><age>18</age><email>zhangsan@163.com</email><birthday>1987-06-08</birthday><memo>好学生</memo></student><student id="2" group="2"><name>李四</name><sex>女</sex><age>18</age><email>lisi@163.com</email><birthday>1987-06-08</birthday><memo>好学生</memo></student><student id="3" group="3"><name>小王</name><sex>男</sex><age>18</age><email>xiaowang@163.com</email><birthday>1987-06-08</birthday><memo>好学生</memo></student><student id="4" group="4"><name>小张</name><sex>男</sex><age>18</age><email>xiaozhang@163.com</email><birthday>1987-06-08</birthday><memo>好学生</memo></student><student id="5" group="5"><name>小明</name><sex>男</sex><age>18</age><email>xiaoming@163.com</email><birthday>1987-06-08</birthday><memo>好学生</memo></student></root>
Xml对应的实体bean文件:
package com.parsexml.entity;public class Student {private int id;private int group;private String name;private String sex;private int age;private String email;private String memo;private String birthday;public int getId() {return id;}public void setId(int id) {this.id = id;}public int getGroup() {return group;}public void setGroup(int group) {this.group = group;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getEmail() {return email;}public void setEmail(String email) {this.email = email;}public String getMemo() {return memo;}public void setMemo(String memo) {this.memo = memo;}public String getBirthday() {return birthday;}public void setBirthday(String birthday) {this.birthday = birthday;}}
Pull解析代码
package com.parsexml;import java.io.IOException;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import com.parsexml.entity.Student;public class PullParseXml {public List<Student> PullParseXML(){List<Student> list=null;Student student = null;//构建XmlPullParserFactorytry {XmlPullParserFactory pullParserFactory=XmlPullParserFactory.newInstance();//获取XmlPullParser的实例XmlPullParser xmlPullParser=pullParserFactory.newPullParser();//设置输入流 xml文件xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream("Student.xml"), "UTF-8");//开始int eventType=xmlPullParser.getEventType();try {while(eventType!=XmlPullParser.END_DOCUMENT){String nodeName=xmlPullParser.getName();switch (eventType) {//文档开始case XmlPullParser.START_DOCUMENT:list=new ArrayList<Student>();break;//开始节点case XmlPullParser.START_TAG://判断如果其实节点为studentif("student".equals(nodeName)){//实例化student对象student=new Student();//设置Id属性student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));//设置Group属性student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));}else if("name".equals(nodeName)){//设置namestudent.setName(xmlPullParser.nextText());}else if("sex".equals(nodeName)){//设置sexstudent.setSex(xmlPullParser.nextText());}else if("age".equals(nodeName)){//设置agestudent.setAge(Integer.parseInt(xmlPullParser.nextText()));}else if("email".equals(nodeName)){//设置emailstudent.setEmail(xmlPullParser.nextText());}else if("birthday".equals(nodeName)){//设置birthdaystudent.setBirthday(xmlPullParser.nextText());}else if("memo".equals(nodeName)){//设置memo属性student.setMemo(xmlPullParser.nextText());}break;//结束节点case XmlPullParser.END_TAG:if("student".equals(nodeName)){list.add(student);student=null;}break;default:break;}eventType=xmlPullParser.next();}} catch (NumberFormatException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}} catch (XmlPullParserException e) {e.printStackTrace();}return list;}public static void main(String[] args) {List<Student> list=new PullParseXml().PullParseXML();for(Student student:list){System.out.println("id:"+student.getId()+"\tgroup:"+student.getGroup()+"\tname:"+student.getName()+"\tsex:"+student.getSex()+"\tage:"+student.getAge()+"\temail:"+student.getEmail()+"\tbirthday:"+student.getBirthday()+"\tmemo:"+student.getMemo());}}}
注:若工程中缺少kxml2-2.3.0.jar文件则会报以下异常信息:
http://www.fengfly.com/plus/view-190679-1.html原文地址有源码下载
更多相关文章
- eclispe 更新sdk Connection to https://dl-ssl.google.com refu
- android之 ExpandableListView的使用
- Android笔记(2)sqlite的用法
- Android(安卓)Selinux 权限处理
- android 状态栏一体化实现
- Android(安卓)-- 系统结构 /system/ 目录下文件夹功能说明
- Android(安卓)listview子控件的的点击事件
- (Android(安卓)Studio)添加按钮以及权重问题
- Android多线程断点续传详解与案例