xml解析数据——XmlPullParser的用法

1、XML对应的实体文件

2、XML文件

3、Pull解析码

android可以使用 SAX和DOM解析XML文件,也可以使用Android内置的Pull解析器解析XML文件。

下面将介绍下在Android中极力推荐的xmlpull方式解析xml。xmlpull不仅仅可以使用在Android上,同样也适用于javase,但在javase环境下,你需要自己去获取xmlpull所依赖的类库。

pull解析是事件驱动的所以根据数据的开始结束标记进行分析。

XML对应的实体文件:

public class StaInfo {
    private int idx;
    private String name;
    private float longitude;
    private float latitude;

    @Override
    public String toString() {
        return "StaInfo{" +
                "idx=" + idx +
                ", name='" + name + '\'' +
                ", longitude=" + longitude +
                ", latitude=" + latitude +
                '}';
    }

    public int getIdx() {
        return idx;
    }

    public void setIdx(int idx) {
        this.idx = idx;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public float getLongitude() {
        return longitude;
    }

    public void setLongitude(float longitude) {
        this.longitude = longitude;
    }

    public float getLatitude() {
        return latitude;
    }

    public void setLatitude(float latitude) {
        this.latitude = latitude;
    }
}

xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Stations>
  <lineName>5</lineName>
  <staCount>26</staCount>
  <StaInfo>
    <idx>1</idx>
    <name>1</name>
    <longitude>30</longitude>
    <latitude>120</latitude>
  </StaInfo>
  <StaInfo>
    <idx>2</idx>
    <name>2</name>
    <longitude>30</longitude>
    <latitude>120</latitude>
  </StaInfo>
  <StaInfo>
    <idx>3</idx>
    <name>3</name>
    <longitude>30</longitude>
    <latitude>120</latitude>
  </StaInfo>
</Stations>

pull解析码:

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;

public class PullParser {
    public void pull() throws Exception {
        ArrayList<StaInfo> staInfos = null;//创建一个集合
        StaInfo station =null;//station对象
        //获得工厂
        XmlPullParserFactory parserFactory = XmlPullParserFactory.newInstance();
        //获得xml的解析器
        XmlPullParser parser = parserFactory.newPullParser();
        //给解析器设置一个输入源
        parser.setInput(new FileInputStream(new File("5up.xml")), "UTF-8");
        int eventType = parser.getEventType();
        while (eventType != XmlPullParser.END_DOCUMENT) {
            switch (eventType) {
                case XmlPullParser.START_TAG:
                    //开始标签,parser获取当前事件对应的元素名字
                    if("Station".equals(parser.getName())){
                        staInfos =new ArrayList<>();
                        //创建一个Station集合
                    }else if("StaInfo".equals(parser.getName())){
                        station =new StaInfo();
                        //创建一个StaInfo对象
                    }else if("idx".equals(parser.getName())){
                        station.setIdx(Integer.parseInt(parser.nextText()));
                        //给StaInfo对象设置id
                    }else if("name".equals(parser.getName())){
                        station.setName(parser.nextText());
                        //给StaInfo对象设置name
                    }else if("longitude".equals(parser.getName())){
                        station.setLongitude(Float.parseFloat(parser.nextText()));
                        //给StaInfo对象设置longitude
                    }else if("latitude".equals(parser.getName())){
                        station.setLatitude(Float.parseFloat(parser.nextText()));
                        //给StaInfo对象设置latitude
                    }else if("subway".equals(parser.getName())){
                        //给StaInfo对象设置subway
                    }else if("transfer".equals(parser.getName())){
                        //给StaInfo对象设置transfer
                    }

                    break;
                case XmlPullParser.END_TAG:
                    if("StaInfo".equals(parser.getName())){
                        staInfos.add(station);
                        break;
                        //把StaInfo对象放到集合中
                    }
                    break;
                default:
                    break;

            }
            //调用parser.next()方法解析下一个元素
            eventType = parser.next();
        }
        for (StaInfo staInfos1 : staInfos) {
            System.out.println("pullparser=======" +staInfos1);
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值