RSS提要解析,提​​取字段值

问题描述:

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

http://docs.oracle.com/javase/tutorial/jaxb/intro/index.html

有无你看看JAXB?这是通过XML解析的更好方法,它可能有助于解决您的问题。

或者,您可以使用该库自动处理您的RSS提要。 https://github.com/Pkmmte/PkRSS

默认情况下,它支持RSS2和Atom,但您可以基于示例扩展自己的Parser类,并使用以下代码将其插入。 新的PkRSS.Builder(this).parser(new CustomParser())。buildSingleton();