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

来源:互联网 发布:威廉 切尔西 知乎 编辑:程序博客网 时间:2024/04/29 18:40

除了可以使用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;    }}

源码下载

0 0
原创粉丝点击