Android之使用XMLPull解析xml(二)
16lz
2021-12-04
转自:http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html
介绍下在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文件:
<?xmlversion="1.0"encoding="UTF-8"?><root>
<studentid="1"group="1">
<name>张三</name>
<sex>男</sex>
<age>18</age>
<email>zhangsan@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="2"group="2">
<name>李四</name>
<sex>女</sex>
<age>18</age>
<email>lisi@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="3"group="3">
<name>小王</name>
<sex>男</sex>
<age>18</age>
<email>xiaowang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="4"group="4">
<name>小张</name>
<sex>男</sex>
<age>18</age>
<email>xiaozhang@163.com</email>
<birthday>1987-06-08</birthday>
<memo>好学生</memo>
</student>
<studentid="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文件:
packagecom.parsexml.entity;publicclassStudent{
privateintid;
privateintgroup;
privateStringname;
privateStringsex;
privateintage;
privateStringemail;
privateStringmemo;
privateStringbirthday;
publicintgetId(){
returnid;
}
publicvoidsetId(intid){
this.id=id;
}
publicintgetGroup(){
returngroup;
}
publicvoidsetGroup(intgroup){
this.group=group;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetEmail(){
returnemail;
}
publicvoidsetEmail(Stringemail){
this.email=email;
}
publicStringgetMemo(){
returnmemo;
}
publicvoidsetMemo(Stringmemo){
this.memo=memo;
}
publicStringgetBirthday(){
returnbirthday;
}
publicvoidsetBirthday(Stringbirthday){
this.birthday=birthday;
}
}
Pull解析代码
packagecom.parsexml;importjava.io.IOException;
importjava.util.ArrayList;
importjava.util.List;
importorg.xmlpull.v1.XmlPullParser;
importorg.xmlpull.v1.XmlPullParserException;
importorg.xmlpull.v1.XmlPullParserFactory;
importcom.parsexml.entity.Student;
publicclassPullParseXml{
publicList<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");
//开始
inteventType=xmlPullParser.getEventType();
try{
while(eventType!=XmlPullParser.END_DOCUMENT){
StringnodeName=xmlPullParser.getName();
switch(eventType){
//文档开始
caseXmlPullParser.START_DOCUMENT:
list=newArrayList<Student>();
break;
//开始节点
caseXmlPullParser.START_TAG:
//判断如果其实节点为student
if("student".equals(nodeName)){
//实例化student对象
student=newStudent();
//设置Id属性
student.setId(Integer.parseInt(xmlPullParser.getAttributeValue(0)));
//设置Group属性
student.setGroup(Integer.parseInt(xmlPullParser.getAttributeValue(1)));
}elseif("name".equals(nodeName)){
//设置name
student.setName(xmlPullParser.nextText());
}elseif("sex".equals(nodeName)){
//设置sex
student.setSex(xmlPullParser.nextText());
}elseif("age".equals(nodeName)){
//设置age
student.setAge(Integer.parseInt(xmlPullParser.nextText()));
}elseif("email".equals(nodeName)){
//设置email
student.setEmail(xmlPullParser.nextText());
}elseif("birthday".equals(nodeName)){
//设置birthday
student.setBirthday(xmlPullParser.nextText());
}elseif("memo".equals(nodeName)){
//设置memo属性
student.setMemo(xmlPullParser.nextText());
}
break;
//结束节点
caseXmlPullParser.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();
}
returnlist;
}
publicstaticvoidmain(String[]args){
List<Student>list=newPullParseXml().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
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- Android中手机震动的设置(Vibrator)的步骤(Android学习随笔三)
- Mac电脑开发Android(安卓)app如何连接真机
- 通过xml布局文件实现按钮改变焦点设置背景图片
- Android实现简单字符驱动程序及测试
- Android(安卓)布局
- Android(安卓)数据存储(二) 文件的使用
- [Android(安卓)源码] Android源码下载