Pull解析

Pull解析

import java.io.IOException;
import java.util.ArrayList;

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

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

/**
* 原理 sax ,以事件作为驱动进行文档的解析 handler —>startDocument() startElement(); end …
* characters();
*
* pull 类似 eventType,事件类型———判断事件类型,根据不同的事件做相应的操作
*
*
* json json xml 优缺点: 优点 缺点 1.xml 扩展性好,xml可以包含json 结构复杂,解析麻烦 2.json 结构简单,解析简单
* 扩展性查差
*
* 百度地图离线 地图体积比较大。–》地图格式改变,地图体积变小了
*
* @author Administrator
*
*/
public class MainActivity extends Activity {
private ArrayList list = null;
private Person person = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button parse = (Button) findViewById(R.id.parse);
    parse.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            /**
             * 1.factory 2.解析者 3.解析
             */
            XmlPullParser pullParser = Xml.newPullParser();// 获取解析者
            // pullParser.setInput(inputStream--输入流, inputEncoding--输入流的编码);

            try {
                pullParser
                        .setInput(getAssets().open("source.xml"), "UTF-8");
                // 实例化集合
                list = new ArrayList<Person>();
                // 获取事件类型
                int eventType = pullParser.getEventType();
                // 判断事件类型
                // 如果文档没有结束,就要一直解析
                while (eventType != XmlPullParser.END_DOCUMENT) {
                    //
                    switch (eventType) {
                    // 判断节点名字
                    case XmlPullParser.START_TAG:
                        // 获取节点名字
                        String startTagName = pullParser.getName();
                        if (startTagName.equals("person")) {
                            // 实例化person对象
                            person = new Person();
                            // 设置属性
                            person.setId(pullParser.getAttributeValue(null,
                                    "id"));
                        } else if (startTagName.equals("name")) {
                            person.setName(pullParser.nextText());
                        } else if (startTagName.equals("age")) {
                            person.setAge(pullParser.nextText());
                        }
                        break;
                    case XmlPullParser.END_TAG:
                        // 获取节点名字
                        String endTagName = pullParser.getName();
                        if (endTagName.equals("person")) {
                            list.add(person);
                        }
                        break;
                    default:
                        break;
                    }
                    // 事件往下移动
                    eventType = pullParser.next();
                }
                // 展示
                for (int i = 0; i < list.size(); i++) {
                    System.out.println("zhanghi----->"
                            + list.get(i).getName());
                }
            } catch (XmlPullParserException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    });
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值