Android解析xml(3)---Pull解析

除了可以使用SAX和DOM解析xml文件外,还可以使用Android系统内置的Pull解析器来解析xml文件。Pull解析器的运行方式与SAX解析器相似。它提供了类似的事件,如开始元素的结束元素事件。使用parser.next()可以进入下一个元素并触发相应事件,当元素开始解析时,调用parser.nextText()方法可以获取下一个Text类型元素的值。

Pull解析器有五种事件状态: START_DOCUMENT —> 类似于SAX解析中的startDocument()
START_TAG —> 类似于SAX解析中的startElement() TEXT —> 类似于SAX中的characters()
END_TAG —> 类似于SAX中的endElement() END_DOCUMENT —>
类似于SAX中的endDocument()

Android解析xml(1)—SAX解析基础上修改StudyParser

import java.io.InputStream;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;
import android.util.Log;
import com.example.data.Study;

public class StudyParser {
    public static Study parse(InputStream is) {
        Study study = null;
        try {
            XmlPullParser parser = XmlPullParserFactory.newInstance().newPullParser();
            parser.setInput(is, "UTF-8");
            int eventType = parser.getEventType();
            while(eventType != XmlPullParser.END_DOCUMENT){
                switch (eventType) {
                case XmlPullParser.START_DOCUMENT:
                    study = new Study();
                    break;
                case XmlPullParser.START_TAG:
                    String tagName = parser.getName();
                    //如果标签名是<study>得到属性id值
                    if(tagName.equalsIgnoreCase(Study.STUDY)){
                        study.mId = Integer.parseInt(parser.getAttributeValue(null, Study.ID));
                    }
                    //如果标签名是<topic>
                    else if(tagName.equalsIgnoreCase(Study.TOPIC)){
                        study.mTopic = parser.nextText();
                    }
                    //如果标签名是<content>
                    else if(tagName.equalsIgnoreCase(Study.CONTENT)){
                        study.mContent = parser.nextText();
                    }
                    //如果标签名是<author>
                    else if(tagName.equalsIgnoreCase(Study.AUTHOR)){
                        study.mAuthor = parser.nextText();
                    }
                    //如果标签名是<date>
                    else if(tagName.equalsIgnoreCase(Study.DATE)){
                        study.mDate = parser.nextText();
                    }
                    break;
                default:
                    break;
                }
                eventType = parser.next();
            }
        } catch(Exception ex) {
            Log.d("XML", "StudyParser: parse() failed");
            study = null;
        }
        return study;
    }
}

源码下载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值