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();