標籤:xmlpullparser asmack android
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 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; } }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代碼裡面混了。
參考及轉載:
http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html
Asmack開發系列之xmlPullParser