问题
I tried making a parser for both RSS and Atom where RSS feed shows the headlines while Atom shows with images and description plus link. It seems my parser works only for RSS. Can you tell me why? Check this one:
public void Get_Parse_Feed(String URL_link, Input_Streamer_Class is, List<String> headlines, List<String> links)
{
try
{
// URL
is = new Input_Streamer_Class();
/*
*
* Reserved URLS:
* --> http://feeds.pcworld.com/pcworld/latestnews
* --> http://feeds2.feedburner.com/boy-kuripot
* --> http://feeds2.feedburner.com/phcreditcardpromos
* --> http://feeds.feedburner.com/blogspot/MKuf
* --> http://googleblog.blogspot.com/atom.xml
*
*/
is.Set_URL(URL_link);
// Set XML pull factory.
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
factory.setNamespaceAware(false);
XmlPullParser xpp = factory.newPullParser();
// Picking up input stream...
xpp.setInput(is.Get_Input_Stream(is.Get_URL()), "UTF_8");
// Check for inside item.
boolean insideItem = false;
// Pick event type. (START_TAG, END_TAG, etc.)
int eventType = xpp.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT)
{
if(eventType == XmlPullParser.START_TAG)
{
if(xpp.getName().equalsIgnoreCase("item"))
{
insideItem = true;
} else if(xpp.getName().equalsIgnoreCase("title")) {
if(insideItem)
{
headlines.add(xpp.nextText()); // --> Extract the headline.
}
} else if(xpp.getName().equalsIgnoreCase("link")) {
if(insideItem)
{
links.add(xpp.nextText()); // --> Extract the link of article.
}
}
} else if((eventType == XmlPullParser.END_TAG) && xpp.getName().equalsIgnoreCase("item")) {
insideItem = false;
}
eventType = xpp.next(); // --> Move to the next element.
}
} catch(MalformedURLException e) {
e.printStackTrace();
} catch(XmlPullParserException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
Every time when I found this tutorial plus managing with MVC for myself, the results is impressive. However, when I try implementing a URL contains Atom feed and it didn't show up.
回答1:
Its obvious the structure is different, you need 2 different parsers! Or 2 packed in one (don't really know how helpful will be that)
Because:
RSS 2.0:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Example Feed</title>
<description>Insert witty or insightful remark here</description>
<link>http://example.org/</link>
<lastBuildDate>Sat, 13 Dec 2003 18:30:02 GMT</lastBuildDate>
<managingEditor>johndoe@example.com (John Doe)</managingEditor>
<item>
<title>Atom-Powered Robots Run Amok</title>
<link>http://example.org/2003/12/13/atom03</link>
<guid isPermaLink="false">urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</guid>
<pubDate>Sat, 13 Dec 2003 18:30:02 GMT</pubDate>
<description>Some text.</description>
</item>
</channel>
</rss>
Atom 1.0:
<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>Example Feed</title>
<subtitle>Insert witty or insightful remark here</subtitle>
<link href="http://example.org/"/>
<updated>2003-12-13T18:30:02Z</updated>
<author>
<name>John Doe</name>
<email>johndoe@example.com</email>
</author>
<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
<entry>
<title>Atom-Powered Robots Run Amok</title>
<link href="http://example.org/2003/12/13/atom03"/>
<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
<updated>2003-12-13T18:30:02Z</updated>
<summary>Some text.</summary>
</entry>
</feed>
Comparison here, the difference problem in your code is that on atom you have entry
not item
as in rss!
来源:https://stackoverflow.com/questions/15021427/difficulty-reading-with-atom-reader