我正在为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&d=identicon&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的第二个标记。
答案 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}}并执行此操作。