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