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 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 {
    
    
    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


相关文章
|
机器学习/深度学习 人工智能 编解码
CES亮点:AI赋能与产业创新 | DALL-E 3、SD等20+图像生成模型综述
随着科技飞速发展,CES(国际消费电子展)已然成为全球科技产业的风向标,每年的CES大会都是业界瞩目的盛事。回顾2024年CES大会,不难发现其亮点纷呈,其中以人工智能的深度赋能为最引人注目之处。AI技术的深入应用成为CES大会上的一大亮点,各大厂商纷纷展示了在AI领域的最新成果。
1114 0
|
24天前
|
人工智能 自然语言处理 Java
Trae 3.0月活破500万:但为什么说Java开发者需要的不是代码补全,而是工程交付?
trae月活突破500万,,Solo Mode 3.0实现无人值守全流程编程。这是AI编程工具的一个里程碑。Trae 3.0的定位从"代码补全"升级到"全流程代理"——自然语言输入需求,AI自动完成编码、测试、部署全链路。它甚至可以在夜间和周末自主运行,批量处理多个项目。
|
3月前
|
SQL 安全 前端开发
公司要做等保,代码审计报告找谁出?常被误读的合规问题
等保2.0要求三级及以上系统必须提供源代码安全审计报告,作为“安全开发”关键证据。该报告需聚焦逻辑层风险(如SQL注入、越权、硬编码密钥等),非漏洞扫描或渗透测试可替代。合规报告须满足:方法论合规(依据GB/T 39412-2020等)、结果可追溯(精确定位至行号+复现路径)、整改可闭环(含修复建议与免费复测)。服务方应具备CMA、CCRC等法定资质,并采用“自动化扫描+人工深度分析”双轨机制。(239字)
|
6月前
|
存储 供应链 安全
智慧医疗·区域云HIS源码一体化协同平台 (SaaS版)
专为集团医院、医共体打造的云原生医疗SaaS平台,基于“中心协同、扁平管理”理念,实现全域资源集成与数据共享。覆盖临床、患者服务、供应链及运营监控四大中心,支持五级EMR、医保实时结算、智能预警与多维BI,开箱即用。
|
存储 分布式计算 资源调度
如何优化Hadoop集群的内存使用?
【6月更文挑战第18天】如何优化Hadoop集群的内存使用?
629 6
|
监控 网络协议 应用服务中间件
动图图解!收到RST,就一定会断开TCP连接吗?
动图图解!收到RST,就一定会断开TCP连接吗?
1361 0
|
移动开发 缓存 前端开发
H5画布 canvas(三)canvas 库 Konva.js 的使用
H5画布 canvas(三)canvas 库 Konva.js 的使用
2346 0
H5画布 canvas(三)canvas 库 Konva.js 的使用
|
Web App开发 Java 开发工具
systrace: 系统级跟踪工具的解析
systrace是Android4.1版本之后推出的,对系统Performance分析的工具,该工具结合Android 内核的数据,最终会生产html文件。 systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等
1038 1
|
存储 索引
mysqldump got error 1812 tablespace is missing for table when using lock tables
mysqldump got error 1812 tablespace is missing for table when using lock tables
1097 1