android pull解析xml

来源:互联网 发布:网络手机制式切换工具 编辑:程序博客网 时间:2024/06/08 17:57

上一篇介绍了如何序列化一份xml文件,那接下来必不可少的肯定是解析它了,那现在我们就来解析一下上一篇生成的那份xml文件。如下:对了,方便起见,这份msmInfo.xml文件我把它放到src根目录下

这里写图片描述

序列化xml用的是XmlSerializer,那相应的解析就是用的XmlPullParser。具体要怎么做呢?

解析过程XmlParserService.java

import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import android.util.Xml;import com.example.practice.domino.MsmInfo;public class XmlParserService {    public static List<MsmInfo> xmlMsmParser(InputStream inputStream)            throws XmlPullParserException, IOException {        List<MsmInfo> msmlist = null;        MsmInfo msmInfo = null;        XmlPullParser parser = Xml.newPullParser();// 新建一个Xml Pull Parser        parser.setInput(inputStream, "utf-8");// 设置输入流解析器将开始。这个调用重置解析器的状态并设置初始值START_DOCUMENT事件类型        int eventType = parser.getEventType();// 返回当前事件的类型(START_TAG、END_TAG、文本等)。        while (eventType != XmlPullParser.END_DOCUMENT) {// 只要文档没结束,循环一直执行            switch (eventType) {            case XmlPullParser.START_TAG:// 当事件类型为START_TAG时,也就是解析到开始标签                if ("msms".equals(parser.getName())) {                    msmlist = new ArrayList<MsmInfo>();                } else if ("msm".equals(parser.getName())) {                    msmInfo = new MsmInfo();                    int id = Integer.parseInt(parser.getAttributeValue(0));// 解析当前标签的属性                    msmInfo.setId(id);                } else if ("type".equals(parser.getName())) {                    int type = Integer.parseInt(parser.nextText().trim());                    msmInfo.setType(type);                } else if ("date".equals(parser.getName())) {                    long date = Long.parseLong(parser.nextText().trim());                    msmInfo.setDate(date);                } else if ("address".equals(parser.getName())) {                    String address = parser.nextText().trim();                    msmInfo.setAddress(address);                } else if ("content".equals(parser.getName())) {                    String content = parser.nextText().trim();                    msmInfo.setContent(content);                }                break;            case XmlPullParser.END_TAG:// 当事件类型为END_TAG时,也就是解析到结束标签                if ("msm".equals(parser.getName())) {                    msmlist.add(msmInfo);// 将对象添加到集合                    msmInfo = null;// 重置短信对象                }                break;            }            eventType = parser.next();// 游标下移,继续解析下一个对象,切记:这个不可少        }        return msmlist;    }}

呐,我们肯定不会只解析就放那里不管了,当然要把解析到的内容显示出来嘛,代码如下:

                //得到msmInfo.xml文件的输入流                InputStream inputStream = XmlParse_Aty.class.getClassLoader()                        .getResourceAsStream("msmInfo.xml");                try {                    List<MsmInfo> msmList = XmlParserService                            .xmlMsmParser(inputStream);                    StringBuffer buffer = new StringBuffer();                    for (MsmInfo msmInfo2 : msmList) {                        buffer.append(msmInfo2.toString());                        buffer.append("\n\n");                    }                    textView.setText(buffer.toString());                } catch (XmlPullParserException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                } catch (IOException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }

MsmInfo.java

public class MsmInfo {    private int id;    private int type;// 1发送,0接收    private long date;// 短信时间    private String address;// 收件人or发件人    private String content;// 短信内容    public MsmInfo() {    }    public MsmInfo(int id, int type, long date, String address, String content) {        this.id = id;        this.type = type;        this.date = date;        this.address = address;        this.content = content;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public int getType() {        return type;    }    public void setType(int type) {        this.type = type;    }    public long getDate() {        return date;    }    public void setDate(long date) {        this.date = date;    }    public String getAddress() {        return address;    }    public void setAddress(String address) {        this.address = address;    }    public String getContent() {        return content;    }    public void setContent(String content) {        this.content = content;    }    @Override    public String toString() {        return "[id=" + id + ", type=" + type + ", 时间=" + date + ", 电话=" + address + ", 短信内容=" + content + "]";    }}

到这里简单的代码思路就完成啦!

0 0
原创粉丝点击