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

XmlPullPaser skip one Tag for Rss Reader in Android

我正在为 rss 提要 wordpress 开发 reader。 问题是它正在拾取头像的图像,不应该。

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");
    }
}

我想知道如何跳过这个 "media: content" 包含 gravatar 图片。

此处示例作为我的 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,并且仅 return 包含我要使用的图像的 url 第二个标签。

如果头像的url是以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);             
             }
        }
  }

另外,请注意您的 insideItem 变量未重置为 false。您可能希望检查 <item>END_TAG 并执行此操作。