我正在尝试使用feed4j库做一个RSS阅读器,我写了这个简单的代码:
import java.net.URL;
import it.sauronsoftware.feed4j.FeedParser;
import it.sauronsoftware.feed4j.bean.Feed;
import it.sauronsoftware.feed4j.bean.FeedHeader;
import it.sauronsoftware.feed4j.bean.FeedItem;
import javax.swing.*;
public class LettoreRSS{
public static void main(String[] args) throws Exception
{
URL url = new URL("myxmlurl");
Feed feed = FeedParser.parse(url);
int items = feed.getItemCount();
FeedHeader header = feed.getHeader();
int dim=50;
JFrame frm = new JFrame(header.getTitle()+" - Last News");
frm.setResizable(false);
frm.getContentPane().setLayout(null);
frm.setBounds(10, 10, 600, 600);
frm.setVisible(true);
frm.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
for (int i=0;i<items;i++)
{
FeedItem item = feed.getItem(i);
JLabel label = new JLabel();
label.setBounds(0, dim*i, 600, 50);
label.setHorizontalAlignment(SwingConstants.CENTER);
label.setText(item.getTitle()+" "+item.getPubDate());
frm.add(label);
}
}
}
但是有一个问题:当我启动程序时,他写了标题但是puDate对所有人都是'空'(我尝试为标题写一个标签(FeedHeader标题),而header.getPubDate()给出了我解决了吗?确定你的日期是正确的。对于我尝试的某些xml来说,它是一样的。 我怎么解决? 谢谢!
答案 0 :(得分:1)
我遇到了同样的问题而且我发现它是因为it.sauronsoftware.feed4j.Constants.java中定义的日期格式,这对我的Feed来说是错误的。所以我实现了自己的方法来获取日期。喜欢:
for (int i = 0; i < feedItem.getNodeCount(); i++) {
RawNode node = feedItem.getNode(i);
if (node instanceof RawElement) {
RawElement element = (RawElement) node;
String name = element.getName();
String value = element.getValue();
if (value == null) {
return null;
}
if (name.equals(FEED_DATE_TAG)) {
try {
return new SimpleDateFormat(FEED_DATE_FORMAT, Locale.US).parse(value);
} catch (ParseException e) {
logger.error("could not parse date : {} ", e.getMessage());
return null;
}
}
}
}
feed4j date formatter是:public DateFormat RFC_822_DATE_FORMAT = new SimpleDateFormat( &#34; EEE&#39;,&#39; dd&#39; &#39; MMM&#39; &#39; YYYY&#39; &#39; HH:MM:SS&#39; &#39; z&#34;,Locale.US);
答案 1 :(得分:1)
我遇到了同样的问题,但我发现它只是处理RSS 2.0的代码中的一个愚蠢错误。如果你在TypeRSS_2_0.java中查看feed4j的源代码,你会在handleItem方法中看到它完全忘记处理pubDate。
这很容易解决。只需将以下内容添加到if-else语句系列中(右下方为guid - 关于第179行)并重新编译feed4j.jar文件。
else if (ename.equals("pubDate")) {
try {
item.setPubDate(Constants.RFC_822_DATE_FORMAT.parse(evalue));
} catch (ParseException e) {
;
}