XmlPullPaser在Android中跳过一个Rss Reader标签

时间:2015-09-15 19:21:30

标签: android rss xmlpullparser

我正在为rss feed wordpress开发一个阅读器。 问题在于它正在拾取重力图像而不应该。

public class RssParser {

    public List<RssItem> parse(InputStream inputStream) throws XmlPullParserException, IOException {
        try {
            XmlPullParser parser = Xml.newPullParser();
            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
            parser.setInput(inputStream, "UTF-8");
            parser.nextTag();
            return readFeed(parser);
        } finally {
            inputStream.close();
        }
    }

    private List<RssItem> readFeed(XmlPullParser parser) throws IOException, XmlPullParserException {
        List<RssItem> items = new ArrayList<>();
        boolean insideItem = false;
        String imageUrl = null;
        parser.require(XmlPullParser.START_TAG, null, "rss");
        while (parser.next() != XmlPullParser.END_DOCUMENT) {
            if (parser.getEventType() != XmlPullParser.START_TAG) {
                continue;
            }
            String name = parser.getName();

            if (name.equals("item")) {
                insideItem = true;
            } else if (name.equals("media:content")) {
                if (insideItem)
                    imageUrl = readImage(parser);
            }

            if (imageUrl != null) {
                RssItem item = new RssItem(imageUrl);
                items.add(item);
                imageUrl = null;
            }
        }
        return items;
    }

    private String readImage(XmlPullParser parser) throws IOException, XmlPullParserException {
        parser.require(XmlPullParser.START_TAG, null, "media:content");
        return parser.getAttributeValue(null, "url");
    }
}

我想知道如何跳过包含gravatar图像的“media:content”。

此示例作为我的rss代码的一部分。

<media:content url="https://1.gravatar.com/avatar/7d261705b92edb50eaca05ed63ca453e?s=96&#38;d=identicon&#38;r=G" medium="image">
    <media:title type="html">renangueiros</media:title>
</media:content>

<media:content url="https://correntesproinfo.files.wordpress.com/2015/08/duvidas.jpg?w=300" medium="image">
    <media:title type="html">duvidas</media:title>
</media:content>

我希望我的代码跳过包含gravatar图像的第一个标记media:content,并且只返回包含我想要使用的图像的url的第二个标记。

1 个答案:

答案 0 :(得分:0)

如果重力图像的网址是以ConnectionListener listener = new ConnectionListener() { public void connected(XMPPConnection xmppConnection) { // run main code incl. the login code runMain(); } public void authenticated(XMPPConnection xmppConnection, boolean resumed) { } public void connectionClosed() { } public void connectionClosedOnError(Exception e) { } public void reconnectingIn(int i) { } public void reconnectionSuccessful() { } public void reconnectionFailed(Exception e) { } }; con.addConnectionListener(listener); // connect con.connect(); runMain() { con.login(jabberId, jabberPass); // ... } 开头的网址,那么您只需使用以下代码:

https://1.gravatar.com/avatar/

另外,请注意您的 if (name.equals("item")) { insideItem = true; } else if (name.equals("media:content")) { if (insideItem) { imageUrl = readImage(parser); if ((imageUrl != null) && ! imageUrl.startsWith("https://1.gravatar.com/avatar/") { RssItem item = new RssItem(imageUrl); items.add(item); } } } 变量未重置为false。您可能希望检查insideItem的{​​{1}}并执行此操作。