2014-07-14 93 views
3

Android:如何解析THIS XML PARSE 我想解析RSS提要。我的问题是如何解析<item></item>标签之间的所有标签。解析Android中的RSS源

<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> 

这是我用来解析值的代码。

NOTE:但是我只能得到一个<media:content> value我的问题是如何获取所有<items>标签中的所有<media:content>值。

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

回答

4

我只是尝试了我的帖子之一发布的网址。

下面就来分析

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 
      } 

日志

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 

注意代码:我没有检查是否所有的标签被解析。自己检查一下。

+0

谢谢你的工作很好.....)) – NagarjunaReddy

+0

@NagarjunaReddy乐于帮助 – Raghunandan