- 程序部分代码如下
- public class StackOverflowXmlParser {
- private static final String ns = null;
- public List parse(InputStream in) throws XmlPullParserException,
- IOException {
- try {
- XmlPullParser parser = Xml.newPullParser();
- parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
- parser.setInput(in, null);
- parser.nextTag();
- return readFeed(parser);
- } finally {
- in.close();
- }
- }
- private List readFeed(XmlPullParser parser) throws XmlPullParserException,
- IOException {
- List entries = new ArrayList();
- parser.require(XmlPullParser.START_TAG, ns, "feed");
- while (parser.next() != XmlPullParser.END_TAG) {
- if (parser.getEventType() != XmlPullParser.START_TAG) {
- continue;
- }
- String name = parser.getName();
- // Starts by looking for the entry tag
- if (name.equals("entry")) {
- entries.add(readEntry(parser));
- } else {
- skip(parser);
- }
- }
- return entries;
- }
- private Entry readEntry(XmlPullParser parser)
- throws XmlPullParserException, IOException {
- parser.require(XmlPullParser.START_TAG, ns, "entry");
- String title = null;
- String summary = null;
- String link = null;
- while (parser.next() != XmlPullParser.END_TAG) {
- if (parser.getEventType() != XmlPullParser.START_TAG) {
- continue;
- }
- String name = parser.getName();
- if (name.equals("title")) {
- title = readTitle(parser);
- } else if (name.equals("summary")) {
- summary = readSummary(parser);
- } else if (name.equals("link")) {
- link = readLink(parser);
- } else {
- skip(parser);
- }
- }
- return new Entry(title, summary, link);
- }
- // Processes title tags in the feed.
- private String readTitle(XmlPullParser parser) throws IOException,
- XmlPullParserException {
- parser.require(XmlPullParser.START_TAG, ns, "title");
- String title = readText(parser);
- parser.require(XmlPullParser.END_TAG, ns, "title");
- return title;
- }
- // Processes link tags in the feed.
- private String readLink(XmlPullParser parser) throws IOException,
- XmlPullParserException {
- String link = "";
- parser.require(XmlPullParser.START_TAG, ns, "link");
- String tag = parser.getName();
- String relType = parser.getAttributeValue(null, "rel");
- if (tag.equals("link")) {
- if (relType.equals("alternate")) {
- link = parser.getAttributeValue(null, "href");
- parser.nextTag();
- }
- }
- parser.require(XmlPullParser.END_TAG, ns, "link");
- return link;
- }
- // Processes summary tags in the feed.
- private String readSummary(XmlPullParser parser) throws IOException,
- XmlPullParserException {
- parser.require(XmlPullParser.START_TAG, ns, "summary");
- String summary = readText(parser);
- parser.require(XmlPullParser.END_TAG, ns, "summary");
- return summary;
- }
- // For the tags title and summary, extracts their text values.
- private String readText(XmlPullParser parser) throws IOException,
- XmlPullParserException {
- String result = "";
- if (parser.next() == XmlPullParser.TEXT) {
- result = parser.getText();
- parser.nextTag();
- }
- return result;
- }
- private void skip(XmlPullParser parser) throws XmlPullParserException,
- IOException {
- if (parser.getEventType() != XmlPullParser.START_TAG) {
- throw new IllegalStateException();
- }
- int depth = 1;
- while (depth != 0) {
- switch (parser.next()) {
- case XmlPullParser.END_TAG:
- depth--;
- break;
- case XmlPullParser.START_TAG:
- depth++;
- break;
- }
- }
- }
- }
- //该片段来自于http://www.codesnippet.cn/detail/110220148656.html
来源: http://www.codesnippet.cn/detail/110220148656.html