pull解析xml文件

pull解析和程序运行一样,从上到下执行,一个一个执行,每个节点会有对应的时间码,然后根据名字可以判断出他是那个具体的节点。

package com.example.pullxml;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import android.os.Bundle;
import android.app.Activity;
import android.util.Xml;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;

public class MainActivity extends Activity {
    private List<Mess> list=null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.btn).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View arg0) {

                // 1)获取src下的资源并返回输入流对象
                InputStream in = getClassLoader().getResourceAsStream(
                        "sms2.xml");
                // 2)获取pull解析器
                XmlPullParser xp = Xml.newPullParser();
                try {
                    // 3)初始化 输入流 和解析的编码集
                    xp.setInput(in, "utf-8");
                    // 4)获取节点事件 每个节点对应不同的参数,所以我们就能知道这个节点是什么节点,然后我们进行对应的操作
                    int type = xp.getEventType();
                    //声明mess封装类
                    Mess mess=null;
                    // 节点事件不是最后一个节点一直运行
                    while (type != XmlPullParser.END_DOCUMENT) {
                        switch (type) {
                        case XmlPullParser.START_TAG:
                            //获取节点的名字
                            if("message".equals(xp.getName())){
                                //当解析到一级节点的时候开始实例化list
                                list = new ArrayList<Mess>();
                                
                            }else if("msm".equals(xp.getName())){
                                //当解析到二级节点的时候开始实例化javabean
                                mess = new Mess();
                            }else if("body".equals(xp.getName())){
                                //这个结点是首部结点,而要获取的是下个结点的内容
                                String body = xp.nextText();
                                mess.setBody(body);
                            }else if("type".equals(xp.getName())){
                                mess.setType(xp.nextText());
                            }else if("date".equals(xp.getName())){
                                mess.setDate(xp.nextText());
                            }else if("address".equals(xp.getName())){
                                mess.setAddress(xp.nextText());
                            }
                            break;
                        case XmlPullParser.END_TAG:
                            //当获取二级节点的末尾结点说明了这个信息获取完了,要放在list里
                            if("msm".equals(xp.getName())){
                                list.add(mess);
                            }
                            break;

                        
                        }

                        // 让指针指向下一个节点并且返回事件参数
                        type = xp.next();
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                for (int i = 0; i < list.size(); i++) {
                    System.out.println(list.get(i).toString());
                }

            }
        });
    }

}

 

posted @ 2015-10-26 23:16  aaddrrooiidd  阅读(156)  评论(0编辑  收藏  举报