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 /rootxml对应的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 {好,xmpPullParse的示例就到此,这足够在Asmack代码里面混了。
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()); }
参考及转载:
http://www.blogjava.net/sxyx2008/archive/2010/08/04/327885.html
相关文章
- Asmack开发系列之通信数据流
- celery开发中踩的坑
- Unity3D游戏UI开发经验谈
- 手把手玩转win8开发系列课程(12)
- Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署
- iOS开发UITableViewCell的选中时的颜色设置
- android应用开发小技巧
- 【IOS-COCOS2D-X 游戏开发之十四】XCODE中C++&OBJECT-C混编,详细介绍如何在COCOS2DX中访问OBJECT函数以及APPLE API
- 【COCOS CREATOR 系列教程之二】脚本开发篇&事件监听、常用函数等示例整合
- 敏捷开发(一)- 搜集故事
- 【云栖大会】探索云时代下的游戏开发模式
- Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件
- Android GIS开发系列-- 入门季(4) GraphicsLayer的点击查询要素
- 使用SAP UI5 Web Components开发React应用
- Rockchip Android 12.0 SDK开发指南
- 音视频开发(二十三):算法系列中的堆排序
- LabVIEW编程LabVIEW开发NI PCI-6511 例程与相关资料
- 【SQL开发实战技巧】系列(三十九):Oracle12C常用新特性☞新增分页查询
- 【SQL开发实战技巧】系列(三十):数仓报表场景☞树形(分层)查询如何排序?以及如何在树形查询中正确的使用where条件
- 【SQL开发实战技巧】系列(十四):计算消费后的余额&计算银行流水累计和&计算各部门工资排名前三位的员工
- ZYNQ - 嵌入式Linux开发 -09- Uboot介绍
- RK3399平台开发系列讲解(内存篇)15.15、MMU页表存储管理部分
- RK3399平台开发系列讲解(内存篇)15.9、内存泄漏排查方法
- RK3399平台开发系列讲解(项目实践篇)1.8、嵌入式开发都可以理解的卷积网络(简单明了无公式)
- [RK3399平台开发系列讲解(系统修改记录篇)1.1、安卓界面如何去掉顶部Google搜索栏
- RK3399平台开发系列讲解(其他篇)1.21、HDMI 自动适配过程分析
- 嵌入式linux开发,默认路由处理