2013-08-28 131 views
1

我在RSS提要解析中是全新的。我正在嘗試的是獲取mp3文件的持續時間。但我無法從一個特定的標籤RSS提要解析,提​​取字段值

<itunes:duration>01:00:00</itunes:duration> 

這裏獲得價值是我的解析代碼:

public List<RSSItem> parse() { 
    final RSSItem currentMessage = new RSSItem(); 
    RootElement root = new RootElement("rss"); 
    final List<RSSItem> messages = new ArrayList<RSSItem>(); 

    Element channel = root.getChild("channel"); 
    Element item = channel.getChild(ITEM); 
    item.setEndElementListener(new EndElementListener() { 
     public void end() { 
      messages.add(currentMessage.copy()); 
     } 
    }); 
    item.getChild(TITLE).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setTitle(body); 
       } 
      }); 
    item.getChild(LINK).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setLink(body); 
       } 
      }); 
    item.getChild(DESCRIPTION).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setDescription(body); 
       } 
      }); 
    item.getChild("http://purl.org/rss/1.0/modules/content/", "encoded") 
      .setEndTextElementListener(new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setContent(body); 
       } 
      }); 
    item.getChild(CONTENT).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setContent(body); 
       } 
      }); 
    item.getChild(PUB_DATE).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setDate(body); 
       } 
      }); 
    item.getChild(CATEGORY).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setCategory(body); 
       } 
      }); 
    Element enclosure = item.getChild(ENCLOSURE); 
    enclosure.setStartElementListener(new StartElementListener() { 

     public void start(Attributes attributes) { 
      currentMessage.setAdioUrl(attributes.getValue("url")); 
      // currentMessage.setAdioFileDuration(attributes.getValue("length")); 
     } 

    }); 
    item.getChild(ADIOFILEDuration).setEndTextElementListener(
      new EndTextElementListener() { 
       public void end(String body) { 
        currentMessage.setAdioFileDuration(body); 
       } 
      }); //ADIOFILEDuration=itunes 

    try { 
     Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, 
       root.getContentHandler()); 
    } catch (Exception e) { 
     throw new RuntimeException(e); 
    } 
    return messages; 
} 

這裏是RSS對象:

<item> 
<title>FantasyGuru.com Show - Jul 30,2009</title> 
<link>http://www.blogtalkradio.com/fantasyguru/2009/07/30/fantasygurucom-show</link> 
..... 
.... 
.... 
.... 
<itunes:duration>01:00:00</itunes:duration> 
<media:group> 
    <media:content url="http://www.blogtalkradio.com/fantasyguru/2009/07/30/fantasygurucom-show.mp3" fileSize="14426407" type="audio/mpeg" /><media:content url="http://www.blogtalkradio.com/fantasyguru/2009/07/30/fantasygurucom-show.wma" fileSize="14426407" type="audio/x-ms-wma" /> 
</media:group> 
<itunes:author>FantasyGuru</itunes:author> 
<itunes:explicit>no</itunes:explicit> 
<itunes:keywords>fantasy,NFL,sports,FantasyGuru,football,BlogTalkRadio, Blog Talk Radio</itunes:keywords> 
<itunes:subtitle>FantasyGuru.com Show</itunes:subtitle> 
</item> 

回答

0

或者,您可以使用該庫自動處理您的RSS提要。 https://github.com/Pkmmte/PkRSS

默認情況下,它支持RSS2和Atom,但您可以基於示例擴展自己的Parser類,並使用以下代碼將其插入。 新的PkRSS.Builder(this).parser(new CustomParser())。buildSingleton();