閱讀575 返回首頁    go 技術社區[雲棲]


Asmack開發係列之xmlPullParser

XMPP是用XML來進行數據交換的,所以,我們必須對XML有了解。對於XML理論知識,可以去稍微的複習一下。例如,節點,實體,屬性等這些。今天,我們需要講的是xmlPullParser。XML解析庫其實有很多,而android平台下非常推崇它,當然XMPP也是,因為它的有點是不需要導入整個xml文件。還記得xmpp的一個特點就是能夠傳輸小片xml文件數據。試想,如果你的xml解析庫非得完整的xml文件,那麼這和xmpp的設計思想是相衝突的。

這裏,我給出一個使用xmlPullParser的例子,拋磚引玉。後續在Asmack中看到它的時候,不至於雲裏霧裏,似懂非懂。

一個存有學生信息的xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <student  group="1">
        <name>張三</name>
        <sex>男</sex>
        <age>18</age>
        <email>zhangsan@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好學生</memo>
    </student>
    <student  group="2">
        <name>李四</name>
        <sex>女</sex>
        <age>18</age>
        <email>lisi@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好學生</memo>
    </student>
    <student  group="3">
        <name>小王</name>
        <sex>男</sex>
        <age>18</age>
        <email>xiaowang@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好學生</memo>
    </student>
    <student  group="4">
        <name>小張</name>
        <sex>男</sex>
        <age>18</age>
        <email>xiaozhang@163.com</email>
        <birthday>1987-06-08</birthday>
        <memo>好學生</memo>
    </student>
    <student  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;
    }
    
}
XmlPullParser的解析代碼:

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());
        }
    }
    
}
好,xmpPullParse的示例就到此,這足夠在Asmack代碼裏麵混了。
參考及轉載:

https://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html


最後更新:2017-04-03 05:40:19

  上一篇:go [麵試題]sizeof與strlen的區別
  下一篇:go js 函數