zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Asmack开发系列之xmlPullParser

开发 系列
2023-09-14 08:56:49 时间

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 zhangsan@163.com /email 

 birthday 1987-06-08 /birthday 

 memo 好学生 /memo 

 /student 

 student id="2" group="2" 

 name 李四 /name 

 sex 女 /sex 

 age 18 /age 

 email lisi@163.com /email 

 birthday 1987-06-08 /birthday 

 memo 好学生 /memo 

 /student 

 student id="3" group="3" 

 name 小王 /name 

 sex 男 /sex 

 age 18 /age 

 email xiaowang@163.com /email 

 birthday 1987-06-08 /birthday 

 memo 好学生 /memo 

 /student 

 student id="4" group="4" 

 name 小张 /name 

 sex 男 /sex 

 age 18 /age 

 email xiaozhang@163.com /email 

 birthday 1987-06-08 /birthday 

 memo 好学生 /memo 

 /student 

 student id="5" 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 {


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