1

我是 RSS 提要解析的新手。我正在尝试的是获取 mp3 文件的持续时间。但我无法从特定标签中获得价值

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

2 回答 2

2

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

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

于 2013-08-28T09:04:27.813 回答
0

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

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

于 2014-08-21T07:29:52.773 回答