XML pull解析

XML返回实例

<song_list list="true">
<song>
<artist_id>88</artist_id>
<language>国语</language>
<pic_big>
http://musicdata.baidu.com/data2/pic/f201bdf2c3c41cef7b74985aee3b7e23/266941936/266941936.jpg
</pic_big>
<pic_small>
http://musicdata.baidu.com/data2/pic/c4ed8fc38ecc1d69c87e5c5183fe3f65/266941939/266941939.jpg
</pic_small>
<country>内地</country>
<area>0</area>
<publishtime>2016-06-23</publishtime>
<album_no>1</album_no>
<lrclink>
http://musicdata.baidu.com/data2/lrc/60902a2420610e8d3ac7ee2f9e754dc1/266942158/266942158.lrc
</lrclink>
<copy_type>1</copy_type>
<hot>750172</hot>
<all_artist_ting_uid>2517</all_artist_ting_uid>
<all_artist_id>88</all_artist_id>
<style>影视原声</style>
<all_rate>64,128,256,320,flac</all_rate>
<versions>影视原声</versions>
<song_id>266942077</song_id>
<title>我好像在哪见过你</title>
<ting_uid>2517</ting_uid>
<author>薛之谦</author>
<album_id>266941947</album_id>
<album_title>我好像在哪见过你</album_title>
<artist_name>薛之谦</artist_name>
</song>

XML PULL 解析

public static List<Music> parseMusicList(InputStream is) throws Exception {
    //创建XmlPull解析器
    XmlPullParser parser = Xml.newPullParser();
    //设置解析器的输入流,和解析编码
    parser.setInput(is, "utf-8");
    //获取事件类型
    int eventType = parser.getEventType();
    //创建Musics集合
    List<Music> musics = new ArrayList<Music>();
    //设置实体类Music为null
    Music music = null;
    //使用while循环进行事件驱动
    while (eventType != XmlPullParser.END_DOCUMENT) {
        //判断事件类型
        switch (eventType) {
            //事件类型是开始标签
            case XmlPullParser.START_TAG:
            String name = parser.getName();
            //如果名字是(song)
            if (name.equals("song")) {
                music = new Music();//创建实体类music
                musics.add(music);//添加到music集合中
            } else if (name.equals("pic_big")) {//如果名字是(pic_big)
                //把pic_big的属性值赋给music实体类中
                music.setPic_big(parser.nextText());
            } else if (name.equals("pic_small")) {
                music.setPic_small(parser.nextText());
            } else if (name.equals("publishtime")) {
                music.setPublishtime(parser.nextText());
            } else if (name.equals("lrclink")) {
                music.setLrclink(parser.nextText());
            } else if (name.equals("song_id")) {
                music.setSong_id(parser.nextText());
            } else if (name.equals("title")) {
                music.setTitle(parser.nextText());
            } else if (name.equals("author")) {
                music.setAuthor(parser.nextText());
            } else if (name.equals("album_id")) {
                music.setAlbum_id(parser.nextText());
            } else if (name.equals("album_title")) {
                music.setAlbum_title(parser.nextText());
            } else if (name.equals("artist_name")) {
                music.setArtist_name(parser.nextText());
            }
            break;
        }
        //向后继续驱动事件
        eventType = parser.next();
    }
    return musics;
}

PULL解析是使用事件驱动的方式,边读取边解析。
当PULL解析器遇到文档中的某个节点时,都会触发
相应事件,我们可以捕获这些事件,并且在该时间
点解析相关内容。

如何使用PULL的方式解析xml?
1>创建xmlpull解析器:
XmlPullParser parser = Xml.newPullParser();
parser.setInput(is);
2>获取事件类型,并且配合while循环,不断驱动事件
并且解析文档内容:
int type=parser.getEventType();
while(type != XmlPullParser.END_DOCUMENT){
根据事件类型解析文档
向后继续驱动事件
type = parser.next();
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值