最近的项目需要网站生成RSS Feed, 搜索一下后决定使用Rome. 生成RSS方法简单.
由于我需要生成的RSS在内容描述中是带有Html标签的, 而在使用后发现了问题, 尽管已经把description设置成"text/html", 但生成的RSS xml文件里Html标签全都被自动转换为转义字符(< >诸如此类), 虽然这也能被各种Rss阅读器识别, 但我一看到那满眼的< >就非常不爽. 直接导致了今天花了一天时间来解决这问题....
废话不多说,直接帖出解决办法:
解压原Rome包, 在com.sun.syndication.io.impl包下找到RSS090Generator这个类, 反编译之,大约在216行找到addItem方法, 注意不是addItems. 代码修改如下:
protected void addItem(Item item, Element parent, int index) throws FeedException {
Element eItem = new Element("item", getFeedNamespace());
populateItem(item,eItem, index);
checkItemConstraints(eItem);
generateItemModules(item.getModules(),eItem);
Element desc=eItem.getChild("description");
String text=desc.getValue();
desc.setContent(new CDATA(text));

parent.addContent(eItem);
}
重新编译, 再将此修改后的类覆盖原包中的类. 完成.
原理: 很简单.就三行代码... 意思是将Rss中为description标签的内容取出,使用JDOM中的CDATA组件放置, CDATA组件可以很好地避免Html标签被转换.
后记(废话): 本来这问题看着是不爽,但无伤大雅还是忍了.但由于后来在description中插入了图片, 而客户又要使用Adobe air作为Rss的客户端阅读器, 图片在浏览器自带的阅读器中可以显示而Adobe air中却显示不出来.于是我直接把问题根源指向了html标签. 但在偶费尽脑力找到解决办法并可以漂亮地显示出正常的Html标签后,Adobe air做的客户端中依然不能显示... 于是我顿悟,其实是图片插入的路径问题.... 插入的是相对路径,浏览器能认出但客户端就没那么聪明了,只认绝对路径. 早知如此,我还费那劲干嘛!!
由于我需要生成的RSS在内容描述中是带有Html标签的, 而在使用后发现了问题, 尽管已经把description设置成"text/html", 但生成的RSS xml文件里Html标签全都被自动转换为转义字符(< >诸如此类), 虽然这也能被各种Rss阅读器识别, 但我一看到那满眼的< >就非常不爽. 直接导致了今天花了一天时间来解决这问题....
废话不多说,直接帖出解决办法:
解压原Rome包, 在com.sun.syndication.io.impl包下找到RSS090Generator这个类, 反编译之,大约在216行找到addItem方法, 注意不是addItems. 代码修改如下:












原理: 很简单.就三行代码... 意思是将Rss中为description标签的内容取出,使用JDOM中的CDATA组件放置, CDATA组件可以很好地避免Html标签被转换.
后记(废话): 本来这问题看着是不爽,但无伤大雅还是忍了.但由于后来在description中插入了图片, 而客户又要使用Adobe air作为Rss的客户端阅读器, 图片在浏览器自带的阅读器中可以显示而Adobe air中却显示不出来.于是我直接把问题根源指向了html标签. 但在偶费尽脑力找到解决办法并可以漂亮地显示出正常的Html标签后,Adobe air做的客户端中依然不能显示... 于是我顿悟,其实是图片插入的路径问题.... 插入的是相对路径,浏览器能认出但客户端就没那么聪明了,只认绝对路径. 早知如此,我还费那劲干嘛!!