轻松使用xmlpull解析xml
16lz
2021-01-26
轻松使用xmlpull解析xml 在上文中介绍了使用sax方式解析xml,这里介绍下在Android中极力推荐的xmlpull方式解析xml。xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库。
环境:
< 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 >
public class Student{
private int id;
private int group;
private Stringname;
private Stringsex;
private int age;
private Stringemail;
private Stringmemo;
private Stringbirthday;
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 StringgetName(){
return name;
}
public void setName(Stringname){
this .name = name;
}
public StringgetSex(){
return sex;
}
public void setSex(Stringsex){
this .sex = sex;
}
public int getAge(){
return age;
}
public void setAge( int age){
this .age = age;
}
public StringgetEmail(){
return email;
}
public void setEmail(Stringemail){
this .email = email;
}
public StringgetMemo(){
return memo;
}
public void setMemo(Stringmemo){
this .memo = memo;
}
public StringgetBirthday(){
return birthday;
}
public void setBirthday(Stringbirthday){
this .birthday = birthday;
}
}
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 ;
Studentstudent = null ;
// 构建XmlPullParserFactory
try {
XmlPullParserFactorypullParserFactory = XmlPullParserFactory.newInstance();
// 获取XmlPullParser的实例
XmlPullParserxmlPullParser = pullParserFactory.newPullParser();
// 设置输入流xml文件
xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream( " Student.xml " ), " UTF-8 " );
// 开始
int eventType = xmlPullParser.getEventType();
try {
while (eventType != XmlPullParser.END_DOCUMENT){
StringnodeName = xmlPullParser.getName();
switch (eventType){
// 文档开始
case XmlPullParser.START_DOCUMENT:
list = new ArrayList < Student > ();
break ;
// 开始节点
case XmlPullParser.START_TAG:
// 判断如果其实节点为student
if ( " 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)){
// 设置name
student.setName(xmlPullParser.nextText());
} else if ( " sex " .equals(nodeName)){
// 设置sex
student.setSex(xmlPullParser.nextText());
} else if ( " age " .equals(nodeName)){
// 设置age
student.setAge(Integer.parseInt(xmlPullParser.nextText()));
} else if ( " email " .equals(nodeName)){
// 设置email
student.setEmail(xmlPullParser.nextText());
} else if ( " birthday " .equals(nodeName)){
// 设置birthday
student.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 (NumberFormatExceptione){
e.printStackTrace();
} catch (IOExceptione){
e.printStackTrace();
}
} catch (XmlPullParserExceptione){
e.printStackTrace();
}
return list;
}
public static void main(String[]args){
List < Student > list = new PullParseXml().PullParseXML();
for (Studentstudent: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
xmlpull_1_1_3_4c.jar
以上两个jar分别从以下网站下载:
http://www.xmlpull.org/ xmlpull
http://kxml.sourceforge.net/ kxml
xml文件:
< 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文件:
public class Student{
private int id;
private int group;
private Stringname;
private Stringsex;
private int age;
private Stringemail;
private Stringmemo;
private Stringbirthday;
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 StringgetName(){
return name;
}
public void setName(Stringname){
this .name = name;
}
public StringgetSex(){
return sex;
}
public void setSex(Stringsex){
this .sex = sex;
}
public int getAge(){
return age;
}
public void setAge( int age){
this .age = age;
}
public StringgetEmail(){
return email;
}
public void setEmail(Stringemail){
this .email = email;
}
public StringgetMemo(){
return memo;
}
public void setMemo(Stringmemo){
this .memo = memo;
}
public StringgetBirthday(){
return birthday;
}
public void setBirthday(Stringbirthday){
this .birthday = birthday;
}
}
Pull解析代码
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 ;
Studentstudent = null ;
// 构建XmlPullParserFactory
try {
XmlPullParserFactorypullParserFactory = XmlPullParserFactory.newInstance();
// 获取XmlPullParser的实例
XmlPullParserxmlPullParser = pullParserFactory.newPullParser();
// 设置输入流xml文件
xmlPullParser.setInput(Thread.currentThread().getContextClassLoader().getResourceAsStream( " Student.xml " ), " UTF-8 " );
// 开始
int eventType = xmlPullParser.getEventType();
try {
while (eventType != XmlPullParser.END_DOCUMENT){
StringnodeName = xmlPullParser.getName();
switch (eventType){
// 文档开始
case XmlPullParser.START_DOCUMENT:
list = new ArrayList < Student > ();
break ;
// 开始节点
case XmlPullParser.START_TAG:
// 判断如果其实节点为student
if ( " 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)){
// 设置name
student.setName(xmlPullParser.nextText());
} else if ( " sex " .equals(nodeName)){
// 设置sex
student.setSex(xmlPullParser.nextText());
} else if ( " age " .equals(nodeName)){
// 设置age
student.setAge(Integer.parseInt(xmlPullParser.nextText()));
} else if ( " email " .equals(nodeName)){
// 设置email
student.setEmail(xmlPullParser.nextText());
} else if ( " birthday " .equals(nodeName)){
// 设置birthday
student.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 (NumberFormatExceptione){
e.printStackTrace();
} catch (IOExceptione){
e.printStackTrace();
}
} catch (XmlPullParserExceptione){
e.printStackTrace();
}
return list;
}
public static void main(String[]args){
List < Student > list = new PullParseXml().PullParseXML();
for (Studentstudent: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文件则会报以下异常信息:
你应该添加kxml2-2.3.0.jar包到你的classpath下
效果图:
点我下载demo
更多相关文章
- SpringBoot 2.0 中 HikariCP 数据库连接池原理解析
- android开发教程之listview使用方法
- Android(安卓)theme 使用
- Android在一个app中启动其他app中的service或者Activity
- Android中WebView用法实例分析
- [android之旅]环境搭建中的一些问题
- Android(安卓)L下用XXRadius设置圆角背景图片不能显示
- Android(安卓)自定义圆环倒计时控件
- Android(安卓)Activity 知识点全面总结