android 解析XML 工具类

/**
 * Created by John on 2016/3/29.
 */
public class XmlParser {
    private static final String ns = null;

    /**
     * 创建一个解析器
     * @param is 传入数据的输入流
     * @return 返回一个装有entry标签的arraylist
     * @throws XmlPullParserException 抛出异常
     * @throws IOException 抛出异常
     */
    public List parse(InputStream is) throws XmlPullParserException, IOException {
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(is, null);
            parser.nextTag();
            return readFeed(parser);
        } finally {
            is.close();
        }
    }

    /**
     * 获取一个feed标签
     * @param parser 传入解析器
     * @return 返回一个List,将所有的entry字段封装在里面
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    private List readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
        List entries = new ArrayList();
        parser.require(XmlPullParser.START_TAG,ns,"feed");
        while(parser.next() != XmlPullParser.END_TAG){
            continue;
        }
        String name = parser.getName();
        if (name.equals("entry")){
            entries.add(readEntry(parser));
        }else {
            skip(parser);
        }
        return entries;
    }

    /**
     * 获取entry标签
     * @param parser 传入解析器
     * @return 返回一个Entry数据,传入实体类以便于使用
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    private Entry readEntry(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG,ns,"entry");
        String title = null;
        String link = null;
        String summary = 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("link")){
                link = readLink(parser);
            }else if(name.equals("summary")){
                summary = readSummary(parser);
            }else {
                skip(parser);
            }
        }
        return new Entry(title,summary,link);
    }

    /**
     * 获取summary标签
     * @param parser 传入解析器
     * @return 返回一个标签
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    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;
    }

    /**
     * 获取link标签
     * @param parser 传入解析器
     * @return 返回一个link标签
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    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;
    }

    /**
     * 获取title标签
     * @param parser 传入解析器
     * @return 返回一个标签
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    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;
    }

    /**
     * 获取标签中的文本
     * @param parser 传入解析器
     * @return 返回一个字符串
     * @throws IOException 抛出异常
     * @throws XmlPullParserException 抛出异常
     */
    private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
        String result = "";
        if (parser.next() == XmlPullParser.TEXT){
            result = parser.getText();
            parser.nextTag();
        }
        return result;
    }

    /**
     * 跳过不需要的标签
     * @param parser 传入解析工具parser
     * @throws XmlPullParserException 抛出异常
     * @throws IOException 抛出异常
     */
    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;
            }
        }
    }

    /**
     * 创建一个Entry实体类
     */
    public static class Entry{
        public final String title;
        public final String link;
        public final String summary;

        private Entry(String title, String summary, String link) {
            this.title = title;
            this.summary = summary;
            this.link = link;
        }
    }
}

这是一个简单的工具类,如果需要获取其他字段也可以自己添加~!

原文地址:https://www.cnblogs.com/android-host/p/5335860.html