轻松使用xmlpull解析xml

轻松使用xmlpull解析xml
        在上文中介绍了使用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文件:

<? xml version="1.0" encoding="UTF-8" ?>
< root >
    
< student  id ="1"  group ="1" >
        
< name > 张三 </ name >
        
< sex > </ sex >
        
< age > 18 </ age >
        
< email > [email protected] </ email >
        
< birthday > 1987-06-08 </ birthday >
        
< memo > 好学生 </ memo >
    
</ student >
    
< student  id ="2"  group ="2" >
        
< name > 李四 </ name >
        
< sex > </ sex >
        
< age > 18 </ age >
        
< email > [email protected] </ email >
        
< birthday > 1987-06-08 </ birthday >
        
< memo > 好学生 </ memo >
    
</ student >
    
< student  id ="3"  group ="3" >
        
< name > 小王 </ name >
        
< sex > </ sex >
        
< age > 18 </ age >
        
< email > [email protected] </ email >
        
< birthday > 1987-06-08 </ birthday >
        
< memo > 好学生 </ memo >
    
</ student >
    
< student  id ="4"  group ="4" >
        
< name > 小张 </ name >
        
< sex > </ sex >
        
< age > 18 </ age >
        
< email > [email protected] </ email >
        
< birthday > 1987-06-08 </ birthday >
        
< memo > 好学生 </ memo >
    
</ student >
    
< student  id ="5"  group ="5" >
        
< name > 小明 </ name >
        
< sex > </ sex >
        
< age > 18 </ age >
        
< email > [email protected] </ 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 ;
        
        
// 构建XmlPullParserFactory
         try  {
            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:
                        
// 判断如果其实节点为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  (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文件则会报以下异常信息:



 

你应该添加kxml2-2.3.0.jar包到你的classpath 

效果图:

点我下载demo


你可能感兴趣的:(轻松使用xmlpull解析xml)