解析Android中一个RSS feed [英] Parse an RSS feed in Android

查看:124
本文介绍了解析Android中一个RSS feed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

Android的:如何解析此XML解析
 我想解析RSS提要。我的问题是我怎么能解析℃之间所有的标签;项目> < /项目方式> 标记

 <渠道>
 <标题>酒吧后< /标题>
 <原子:链接HREF =HTTP://abishtpub.word$p$pss.com/feed/相对=自我
 类型=应用程序/ RSS + XML/>
 &LT;链路GT; HTTP://abishtpub.word$p$pss.com< /链接&GT;
  &LT;描述&gt;将细字press.com网站&LT; /描述&GT;  &LT;项目&GT;
    &LT;标题&GT;多内容&LT; /标题&GT;      &LT;媒体:内容URL =?http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6 S = 96和D = identicon&安培; R = G中等=形象&GT;
      &LT;媒体:标题类型=HTML&GT; abisht&LT; /媒体:标题&GT;
          &LT; /媒体:内容&GT;
      &LT;媒体:内容URL =HTTP://abishtpub.files.word$p$pss.com/2014/06/modern-medicine.jpg W = 300中的=形象&GT;
      &LT;媒体:标题类型=HTML&GT;现代医药LT; /媒体:标题&GT;
          &LT; /媒体:内容&GT;
      &LT;媒体:内容URL =HTTP://abishtpub.files.word$p$pss.com/2014/06/frisky_nursing_home.jpg W = 300中的=形象&GT;
      &LT;媒体:标题类型=HTML&GT; frisky_nursing_home&LT; /媒体:标题&GT;
          &LT; /媒体:内容&GT;
   &LT; /项目&GT;

这是code现在用的解析值。

注:但是我得到只有一个&LT;媒体:内容&GT;值我的问题是如何让所有&LT;媒体:内容&GT; 中的所有值&LT;项目&GT; 标签。

 私人字符串readItem(XmlPullParser解析器)抛出XmlPullParserException,IOException异常{
            的RSSItem的RSSItem =新的RSSItem();
            ArrayList的&LT;&HashMap的LT;字符串,字符串&GT;&GT;菜单项=新的ArrayList&LT;&HashMap的LT;字符串,字符串&GT;&GT;();
            字符串结果=; //新SpannedString();
            parser.require(XmlPullParser.START_TAG,空,项目);            而(parser.next()!= XmlPullParser.END_TAG){
                如果(parser.getEventType()!= XmlPullParser.START_TAG){
                    继续;
                }
                字符串名称= parser.getName();
                Log.d(调试,项目:名称:+姓名);
                如果(name.equals(标题)){
                    rssItem.title = readTitle(分析器);
                }否则如果(name.equals(链接)){
                    rssItem.link =的readlink(分析器);
                }否则如果(name.equals(媒体:内容)){
                    结果= readMedia(分析器);
                }            }
            listData.add(的RSSItem);
            返回结果;
        }


解决方案

我只是想我的职位之一下的网址公布。

这里的code解析

  XmlPullParserFactory厂= XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(假);
            XmlPullParser XPP = factory.newPullParser();
            InputStream为=新ByteArrayInputStream进行(res.getBytes());
            xpp.setInput(是,NULL);
            // xpp.setInput(的getInputStream(URL),UTF-8);            布尔insideItem = FALSE;            //返回当前事件的类型:START_TAG,END_TAG等。
            INT EVENTTYPE = xpp.getEventType();
            而(EVENTTYPE!= XmlPullParser.END_DOCUMENT){
                如果(EVENTTYPE == XmlPullParser.START_TAG){                    如果(xpp.getName()。equalsIgnoreCase(项目)){
                        insideItem = TRUE;
                    }否则如果(xpp.getName()。equalsIgnoreCase(标题)){
                        如果(insideItem)
                            Log.i(标题为xpp.nextText());
                    }否则如果(xpp.getName()。equalsIgnoreCase(链接)){
                        如果(insideItem)
                            Log.i(链接,xpp.nextText());
                    }
                    否则,如果(xpp.getName()。equalsIgnoreCase(意见)){
                        如果(insideItem)
                            Log.i(评论是,xpp.nextText());
                    }
                    否则如果(xpp.getName()。equalsIgnoreCase(pubdate的)){
                        如果(insideItem)
                            Log.i(发布日期是,xpp.nextText());
                    }
                    否则,如果(xpp.getName()equalsIgnoreCase(媒体:内容)){
                        如果(insideItem)
                            Log.i(媒体内容的URL是,xpp.getAttributeValue(NULL,URL));
                    }
                    否则,如果(xpp.getName()equalsIgnoreCase(媒体:标题)){
                        如果(insideItem)
                            Log.i(媒体内容的标题。xpp.nextText());
                    }                }否则如果(EVENTTYPE == XmlPullParser.END_TAG&放大器;&安培; xpp.getName()equalsIgnoreCase(项目)){
                    insideItem = FALSE;
                }                EVENTTYPE = xpp.next(); ///移动到下一个元素
            }

日志

  12月7日至14日:16:02.683:I /标题是(2204):多内容
12月7日至14日:16:02.683:I / Link是(2204):HTTP://abishtpub.word$p$pss.com/2014/06/20/multi-content/
12月7日至14日:16:02.683:I /注释(2204):HTTP://abishtpub.word$p$pss.com/2014/06/20/multi-content/#comments
十二月7日至14日:16:02.693:I /发布日期为(2204):周五,2014年6月20日13时04分07秒+0000
12月7日至14日:16:02.693:I /媒体内容的网址是(2204):http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
12月7日至14日:16:02.693:I /媒体内容的标题(2204):abisht
12月7日至14日:16:02.693:I /媒体内容的网址是(2204):HTTP://abishtpub.files.word$p$pss.com/2014/06/modern-medicine.jpg W = 300
12月7日至14日:16:02.693:I /媒体内容的标题(2204):现代医学
12月7日至14日:16:02.693:I /媒体内容的网址是(2204):HTTP://abishtpub.files.word$p$pss.com/2014/06/frisky_nursing_home.jpg W = 300
12月7日至14日:16:02.693:I /媒体内容的标题(2204):frisky_nursing_home
12月7日至14日:16:02.693:I /标题是(2204):我的下一个职位
12月7日至14日:16:02.693:I / Link是(2204):HTTP://abishtpub.word$p$pss.com/2014/06/19/my-next-post/
12月7日至14日:16:02.693:I /注释(2204):HTTP://abishtpub.word$p$pss.com/2014/06/19/my-next-post/#comments
十二月7日至14日:16:02.693:I /发布日期为(2204):星期四,2014年6月19日13点24分26秒+0000
12月7日至14日:16:02.693:I /媒体内容的网址是(2204):http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
12月7日至14日:16:02.693:I /媒体内容的标题(2204):abisht
12月7日至14日:16:02.693:I /标题是(2204):标题测试
12月7日至14日:16:02.693:I / Link是(2204):HTTP://abishtpub.word$p$pss.com/2014/06/19/title-test/
12月7日至14日:16:02.693:I /注释(2204):HTTP://abishtpub.word$p$pss.com/2014/06/19/title-test/#comments
十二月7日至14日:16:02.693:I /发布日期为(2204):星期四,2014年6月19日13点11分十七秒+0000
12月7日至14日:16:02.693:I /媒体内容的网址是(2204):http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
12月7日至14日:16:02.693:I /媒体内容的标题(2204):abisht

请注意:我还没有检查是否所有的标签被解析。不要自己去查。

Android : how to parse THIS XML PARSE I would like to parse a RSS feed. My question is how can I parse all tags between the <item> and </item> tags.

  <channel>
 <title>Pub post</title>
 <atom:link href="http://abishtpub.wordpress.com/feed/" rel="self"              
 type="application/rss+xml"/>
 <link>http://abishtpub.wordpress.com</link>
  <description>A fine WordPress.com site</description>

  <item>
    <title>multi-content</title>

      <media:content url="http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6? s=96&d=identicon&r=G" medium="image">
      <media:title type="html">abisht</media:title>
          </media:content>
      <media:content url="http://abishtpub.files.wordpress.com/2014/06/modern-medicine.jpg?w=300" medium="image">
      <media:title type="html">modern-medicine</media:title>
          </media:content>
      <media:content url="http://abishtpub.files.wordpress.com/2014/06/frisky_nursing_home.jpg?w=300" medium="image">
      <media:title type="html">frisky_nursing_home</media:title>
          </media:content>
   </item>

This is the code am using to parse the value.

NOTE: But am getting only one <media:content> value My Question is How to get All <media:content> values in all <items> tags.

   private String readItem(XmlPullParser parser)    throws XmlPullParserException, IOException {
            RSSItem rssItem = new RSSItem();
            ArrayList<HashMap<String, String>> menuItems = new ArrayList<HashMap<String, String>>();
            String result = "";// new SpannedString("");
            parser.require(XmlPullParser.START_TAG, null, "item");              

            while (parser.next()!= XmlPullParser.END_TAG) {
                if (parser.getEventType() != XmlPullParser.START_TAG) {
                    continue;
                }
                String name = parser.getName();
                Log.d("debug","item:name:"+name);
                if (name.equals("title")) {
                    rssItem.title = readTitle(parser);
                }else if(name.equals("link")){                      
                    rssItem.link = readlink(parser);
                } else if (name.equals("media:content")) {
                    result = readMedia(parser);
                }  

            }
            listData.add(rssItem);
            return result;
        }

解决方案

I just tried the url posted under one of my posts.

Here's the code to parse

 XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
            factory.setNamespaceAware(false);
            XmlPullParser xpp = factory.newPullParser();
            InputStream is = new ByteArrayInputStream(res.getBytes());
            xpp.setInput(is,null);
            // xpp.setInput(getInputStream(url), "UTF-8");

            boolean insideItem = false;

            // Returns the type of current event: 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)
                            Log.i("Title is",xpp.nextText()); 
                    } else if (xpp.getName().equalsIgnoreCase("link")) {
                        if (insideItem)
                            Log.i("Link is",xpp.nextText()); 
                    }
                    else if (xpp.getName().equalsIgnoreCase("comments")) {
                        if (insideItem)
                            Log.i("Comment is.",xpp.nextText());  
                    }
                    else if (xpp.getName().equalsIgnoreCase("pubDate")) {
                        if (insideItem)
                            Log.i("Publish Date is.",xpp.nextText());  
                    }
                    else if (xpp.getName().equalsIgnoreCase("media:content")) {
                        if (insideItem)
                            Log.i("Media Content url is.",xpp.getAttributeValue(null, "url"));  
                    }
                    else if (xpp.getName().equalsIgnoreCase("media:title")) {
                        if (insideItem)
                            Log.i("Media Content title.",xpp.nextText());  
                    }

                } else if (eventType == XmlPullParser.END_TAG && xpp.getName().equalsIgnoreCase("item")) {
                    insideItem = false;
                }

                eventType = xpp.next(); /// move to next element
            }

The log

07-14 12:16:02.683: I/Title is(2204): multi-content
07-14 12:16:02.683: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/20/multi-content/
07-14 12:16:02.683: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/20/multi-content/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Fri, 20 Jun 2014 13:04:07 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht
07-14 12:16:02.693: I/Media Content url is.(2204): http://abishtpub.files.wordpress.com/2014/06/modern-medicine.jpg?w=300
07-14 12:16:02.693: I/Media Content title.(2204): modern-medicine
07-14 12:16:02.693: I/Media Content url is.(2204): http://abishtpub.files.wordpress.com/2014/06/frisky_nursing_home.jpg?w=300
07-14 12:16:02.693: I/Media Content title.(2204): frisky_nursing_home
07-14 12:16:02.693: I/Title is(2204): my next post
07-14 12:16:02.693: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/19/my-next-post/
07-14 12:16:02.693: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/19/my-next-post/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Thu, 19 Jun 2014 13:24:26 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht
07-14 12:16:02.693: I/Title is(2204): Title test
07-14 12:16:02.693: I/Link is(2204): http://abishtpub.wordpress.com/2014/06/19/title-test/
07-14 12:16:02.693: I/Comment is.(2204): http://abishtpub.wordpress.com/2014/06/19/title-test/#comments
07-14 12:16:02.693: I/Publish Date is.(2204): Thu, 19 Jun 2014 13:11:17 +0000
07-14 12:16:02.693: I/Media Content url is.(2204): http://1.gravatar.com/avatar/afb466de71a710f1e901250488e9ebd6?s=96&d=identicon&r=G
07-14 12:16:02.693: I/Media Content title.(2204): abisht

Note: I haven't check if all the tags are parsed. Do check it yourself.

这篇关于解析Android中一个RSS feed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆