2012-10-01 67 views
0

我正在執行基於從Picasa公共相冊中檢索圖像的任務。它以原子輸入格式返回響應。這是來自Picasa的響應代碼片斷。android如何解析atom feed?

<item> 
<guid isPermaLink="false">https://picasaweb.google.com/data/entry/base/user/112104498664640193446/albumid/5791036084570489841/photoid/5791036081578935442?alt=rss&amp;hl=en_US</guid> 
<pubDate>Sat, 22 Sep 2012 16:17:38 +0000</pubDate> 
<atom:updated>2012-09-24T19:11:05.625Z</atom:updated> 
<category domain="http://schemas.google.com/g/2005#kind">http://schemas.google.com/photos/2007#photo</category> 
<title>SACHIN-TENDULKAR-WALLPAPER-51[1].jpg</title> 
<description>&lt;table>&lt;tr>&lt;td style="padding: 0 5px">&lt;a href="https://picasaweb.google.com/112104498664640193446/Sachin?authkey=Gv1sRgCMG2v_GY6-iiOg#5791036081578935442">&lt;img style="border:1px solid #5C7FB9" src="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/s288/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" alt="SACHIN-TENDULKAR-WALLPAPER-51[1].jpg"/>&lt;/a>&lt;/td>&lt;td valign="top">&lt;font color="#6B6B6B">Date: &lt;/font>&lt;font color="#333333">Sep 22, 2012 4:17 PM&lt;/font>&lt;br/>&lt;font color=\"#6B6B6B\">Number of Comments on Photo:&lt;/font>&lt;font color=\"#333333\">0&lt;/font>&lt;br/>&lt;p>&lt;a href="https://picasaweb.google.com/112104498664640193446/Sachin?authkey=Gv1sRgCMG2v_GY6-iiOg#5791036081578935442">&lt;font color="#3964C2">View Photo&lt;/font>&lt;/a>&lt;/p>&lt;/td>&lt;/tr>&lt;/table></description> 
<enclosure type="image/jpeg" url="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" length="0"/> 
<link>https://picasaweb.google.com/112104498664640193446/Sachin?authkey=Gv1sRgCMG2v_GY6-iiOg#5791036081578935442</link> 
<media:group> 
<media:content url="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" height="384" width="512" type="image/jpeg" medium="image"/> 
<media:credit>NW_MAY08</media:credit> 
<media:description type="plain"/> 
<media:keywords/> 
<media:thumbnail url="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/s72/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" height="54" width="72"/> 
<media:thumbnail url="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/s144/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" height="108" width="144"/> 
<media:thumbnail url="https://lh3.googleusercontent.com/-IQEQp8boLEg/UF3kokv7hJI/AAAAAAAAACk/cr53Fr8fUC4/s288/SACHIN-TENDULKAR-WALLPAPER-51%25255B1%25255D.jpg" height="216" width="288"/> 
<media:title type="plain">SACHIN-TENDULKAR-WALLPAPER-51[1].jpg</media:title> 
</media:group> 
</item> 

編輯:

public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { 
     //Only consider elements from allowed third-party namespaces 
     if (NAMESPACES.contains(uri)) { 
      mSb = new StringBuffer(); 
      String value = localName.trim(); 
      //Log.i(TAG, "start"); 
      if (value.equalsIgnoreCase("rss") || value.equalsIgnoreCase("rdf")) { 
       isType = true; 
      } else if (value.equalsIgnoreCase("feed")) { 
       isType = true; 
       isFeed = true; 
      } else if (value.equalsIgnoreCase("channel")) { 
       isFeed = true; 
      } else if (value.equalsIgnoreCase("item") || value.equalsIgnoreCase("entry")) { 
       mItem = new Item(); 
       imageLoader = new ImageLoader(context); 
       isItem = true;  
      } else if (value.equalsIgnoreCase("title")) 
       isTitle = true; 
      else if (value.equalsIgnoreCase("link")) { 
       // Get attributes from link element for Atom format 
       if (attributes != null) { 
        // Enclosure for Atom format 
        if (attributes.getValue("rel") != null && attributes.getValue("rel").equalsIgnoreCase("enclosure")) { 
         mEnclosure = new Enclosure(); 
         mMimeAttribute = attributes.getValue("type"); 
         isEnclosure = true; 
        } 
        mHrefAttribute = attributes.getValue("href"); 
       } 
       isLink = true; 
      } else if (value.equalsIgnoreCase("pubDate") || value.equalsIgnoreCase("published") || value.equalsIgnoreCase("date")) 
       isPubdate = true; 
      else if (value.equalsIgnoreCase("guid") || value.equalsIgnoreCase("id")) 
       isGuid = true; 
      else if (value.equalsIgnoreCase("description") || value.equalsIgnoreCase("summary")) 
       isDescription = true; 
      else if (value.equalsIgnoreCase("encoded") || value.equalsIgnoreCase("content")) 
       isContent = true; 
      else if (value.equalsIgnoreCase("source")) 
       isSource = true; 
      else if(value.equalsIgnoreCase("media:group")){ 
       isMedia = true; 
       Log.i("media", "media group"); 
      } 
      else if (value.equalsIgnoreCase("enclosure")) { 
       // Enclosure for RSS format 
       if (attributes != null) { 
        mEnclosure = new Enclosure(); 
        mMimeAttribute = attributes.getValue("type"); 
        mHrefAttribute = attributes.getValue("url"); 
        if(mMimeAttribute.equalsIgnoreCase("image/jpeg")){ 
         mItem.setImageUrl(mHrefAttribute); 
        } 
        Bitmap bmp = imageLoader.getBitmap(mHrefAttribute); 
        mItem.setBitmapImage(bmp); 
        isEnclosure = true; 
       } 
      }else if(value.equalsIgnoreCase("media:content")){ 
       if(attributes != null){ 
        mMediaContent = new MediaContent(); 
        mMimeAttribute_media = attributes.getValue("type"); 
        mHrefAttribute_media = attributes.getValue("url"); 
       } 
      } 
     } 
    } 

編輯2

這裏是logcat的當我使用Log.i( 「RSSHandler」, 「的localName =」 +的localName +」,QNAME =「+ QNAME);

10-02 14:04:51.799: I/RSSHandler(3090): localName=item, qName=item 
10-02 14:04:51.799: I/RSSHandler(3090): localName=guid, qName=guid 
10-02 14:04:51.799: I/RSSHandler(3090): localName=pubDate, qName=pubDate 
10-02 14:04:51.799: I/RSSHandler(3090): localName=updated, qName=atom:updated 
10-02 14:04:51.799: I/RSSHandler(3090): localName=category, qName=category 
10-02 14:04:51.799: I/RSSHandler(3090): localName=title, qName=title 
10-02 14:04:51.799: I/RSSHandler(3090): localName=description, qName=description 
10-02 14:04:51.819: I/RSSHandler(3090): localName=enclosure, qName=enclosure 
10-02 14:04:51.839: I/RSSHandler(3090): localName=link, qName=link 
10-02 14:04:51.839: I/RSSHandler(3090): localName=group, qName=media:group 
10-02 14:04:51.839: I/RSSHandler(3090): localName=content, qName=media:content 
10-02 14:04:51.839: I/RSSHandler(3090): localName=credit, qName=media:credit 
10-02 14:04:51.839: I/RSSHandler(3090): localName=description, qName=media:description 
10-02 14:04:51.839: I/RSSHandler(3090): localName=keywords, qName=media:keywords 
10-02 14:04:51.839: I/RSSHandler(3090): localName=thumbnail, qName=media:thumbnail 
10-02 14:04:51.839: I/RSSHandler(3090): localName=thumbnail, qName=media:thumbnail 
10-02 14:04:51.839: I/RSSHandler(3090): localName=thumbnail, qName=media:thumbnail 
10-02 14:04:51.839: I/RSSHandler(3090): localName=title, qName=media:title 

我試圖改變這樣的代碼:

else if(qName.trim().equalsIgnoreCase("media:content") || value.equalsIgnoreCase("content")){ 

       if (attributes != null) { 
        mMediaContent = new MediaContent(); 
        mHrefAttribute_media = attributes.getValue("url"); 
        Log.i("media url", mHrefAttribute_media); 
       } 
       isMedia = true; 
       Log.i("media group", "media content"); 
      } 

但是,這是行不通的。

我無法從此回覆中讀取medai:group。我試過this但我無法得到結果。任何人都可以幫助我這樣做。謝謝。

+0

你如何解析呢?你使用了哪個解析器?在標籤'media:group'中,'media'是命名空間,'group'是元素名稱。 – Rajesh

+0

@Rajesh我正在使用SAX解析器。看到這個鏈接。我使用相同的過程。 http://www.javaworld.com/javaworld/jw-02-2012/120214-jtip-rss-for-android.html?page=2 – wolverine

+0

請在您閱讀所需元素的地方張貼代碼片段。 – Rajesh

回答

0

media:group包含兩部分media,它是名稱空間前綴和group,它是元素名稱。

的startElement的localName和QName參數XML SAX: Explain result in `qName` and `localName` in one example XML file

解釋所以你可以按如下修改代碼:

 else if(qName.equalsIgnoreCase("media:group")){ 
      isMedia = true; 
      Log.i("media", "media group"); 
     } 
+0

即使這不起作用.. – wolverine

+0

請檢查您是否在LogCat中有任何異常。嘗試添加調試日誌語句,並查看傳遞給startElement的參數。 – Rajesh

+0

請檢查[讀寫日誌](http://developer.android.com/tools/debugging/debugging-log.html),瞭解如何編寫和使用日誌語句。我很抱歉,但我不能在gtalk上聊天。 – Rajesh