575
技術社區[雲棲]
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