Difficulty Reading with Atom Reader

2019-08-31 00:17发布

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条回答
迷人小祖宗
2楼-- · 2019-08-31 00:25

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!

查看更多
登录 后发表回答