ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>少妇激情av一区二区,久久超级碰碰,国产精品久久久久久模特http://www.aygfsteel.com/wangxlyy/zh-cnFri, 25 Jul 2025 05:55:18 GMTFri, 25 Jul 2025 05:55:18 GMT60java rss lib评测http://www.aygfsteel.com/wangxlyy/archive/2008/01/31/178603.htmlwangxlyywangxlyyWed, 30 Jan 2008 16:23:00 GMThttp://www.aygfsteel.com/wangxlyy/archive/2008/01/31/178603.htmlhttp://www.aygfsteel.com/wangxlyy/comments/178603.htmlhttp://www.aygfsteel.com/wangxlyy/archive/2008/01/31/178603.html#Feedback0http://www.aygfsteel.com/wangxlyy/comments/commentRss/178603.htmlhttp://www.aygfsteel.com/wangxlyy/services/trackbacks/178603.html     
    æˆ‘的目标是做一个简单的portletåQŒæ¯‹Æ¡è¯»å–æ–°‹¹ªçš„RSS站点昄¡¤ºæœ€æ–°çš„æ–°é—»æ¡ç›®ã€?br />
    èŠ×ƒº†ä¸€ä¸ªä¸‹åˆï¼ŒåŽ»sourceforgeå’Œgoogle 上搜ç´?opensource çš?java rss libåQŒè¿˜çœŸæœ‰ä¸å°‘åQˆé¡ºä¾¿æä¸€ä¸‹ï¼Œsourceforget的搜索真的很烂)。简单过滤以后,觉得以下三个¾cÕdº“比较有搞头。Rome 、rssutilså’Œrsslib4j。具体的评测如下åQ?br />
一. Rome
    Rome æ˜?java.net 上的一个开源项目,现在的版本是0.5ã€‚äØ“ä»€ä¹ˆå«Rome呢,按它的介¾lä¸Šçš„说法,有个“条条大èµ\通罗é©?#8221;的意思,有些RSS的意呟뀂Rome可能æ˜?sun 公司从自己某个子™å¹ç›®ä¸­æŠ½¼›Õd‡ºæ¥çš„åQŒpackage和类的命名就象j2sdk一æ äh„Ÿè§‰è§„范。功能上支持RSS的所有版本及 Atom 0.3(Atom是和RSS¾cÖM¼¼çš„一¿Uå†…容聚合的方式)。Rome 本èín是提供API和功能实玎ͼŒå…¶ä¸‹ç‹¬ç«‹å‡ÞZ¸€ä¸?rome-fetcher ™å¹ç›®åQŒä¸“门用来读取RSS内容。正和我意啊ã€?br />     å‚ç…§ fetcher 上的范例åQŒè§£æž?RSS 相当½Ž€å•,代码片断如下åQ?br />
    FeedFetcher fetcher = new HttpURLFeedFetcher();
    SyndFeed feed = fetcher.retrieveFeed(feedUrl);
    System.out.println(feedUrl + " has a title: " + new String(feed.getTitle().getBytes("iso8859-1"), "utf-8") + " and contains "     + feed.getEntries().size() + " entries.");
    for (Iterator iter = feed.getEntries().iterator(); iter.hasNext(); ) {
        SyndEntry entry = (SyndEntry) iter.next();
        System.out.println("<a href=" + entry.getLink() + ">" + entry.getTitle() + "</a>[" + entry.getPublishedDate() + "]");
    }
    
    ä¸ÞZ»€ä¹ˆç”¨  new String(feed.getTitle().getBytes("iso8859-1"), "utf-8")  ˜q›è¡Œè½¬ç åQŒæ˜¯å› äØ“Rome来解æž?新浪新闻 RSS的时候试图从 URLConnection çš?header  中得到编码信息,否则æ€ÀL˜¯ç”?iso8859-1。而新‹¹ªçš„RSS response header 中不包含¾~–码信息åQŒæ‰€ä»¥è¦åšä¸€ç•ªè{码。另外还有就æ˜?entry.getPubDate() 也将˜q”回nullåQŒå› ä¸ºRome 用多¿Upattern 去试图解析时间信息,新浪的时间格式还是符合RFC822的,但是Rome 使用SimpleDateFormat 来解析时é—ß_¼Œå®ƒå¿˜è®îCº†ä¸€ç‚¹ï¼Œž®±æ˜¯ SimpleDateFormat的解析是兌™”äº?Locale 的,所以由于我本地locale是ChinaåQŒSimpleDateFormatçš„parseæ–ÒŽ³•解析不出英文的时间字½W¦ã€‚以上代码前åŠ?Locale.setDefault(Locale.Englisth) 可以搞定åQŒä½†æ€»è§‰å¾—不爽ã€?br />
    å¦‚果也不惌™{码的话,Rome ˜q˜æä¾›äº†ä¸€ä¸?XmlReader 的类åQŒé€šè¿‡åˆ†æž header å’?xml 内容推断 encodingåQŒä¿®æ”?HttpURLFeedFetcher 的源ç ?:

    // 改变 InputStreamReader , 换用 XmlReader
    //InputStreamReader reader = new InputStreamReader(is, ResponseHandler.getCharacterEncoding(connection));
    XmlReader reader = new XmlReader(connection);
    SyndFeedInput input = new SyndFeedInput();
    SyndFeed feed = input.build(reader);

    é‚£ä¹ˆä¸­æ–‡ä¸ç”¨è½¬ç ä¹Ÿèƒ½æ­£ç¡®æ˜„¡¤ºäº†ï¼Œä¸è¿‡ä¿®æ”¹æºç åŽæˆ‘再解æž?nbsp;癑ֺ¦æ–°é—» RSS 的时候,底层的JDOM却会抱错说xml 格式不正¼‹®ã€‚也许Rome的开发者也遇到˜q‡è¿™æ ïLš„问题åQŒæ‰€ä»¥æ‰æ²¡æœ‰ä½¿ç”¨ XmlReaderã€?br />
� rssutils
    å®ƒæ˜¯ä¸€ä¸ªå·¥å…·åŒ…åQŒsun çš?develope站点上有文章 RSS Utilities: A Tutorial 专门介绍用taglib 昄¡¤ºRSS内容åQŒé™„带的可以下蝲˜q™ä¸ªå·¥å…·åŒ…,但我从网上搜索不到它的出处,自然也无法看到它的源码。但从反¾~–译的代码来看,也是sun公司内部高手所做,设计¾_‘ÖéyåQŒä»£ç ç®€¾lƒã€‚实çŽîC¸€ä¸ªhandleråQŒç”¨sax的方式解析xml内容åQŒhandler内部用反ž®„å’Œjavabean的机制构造RSS元素对象òq¶èµ‹å€¹{€‚代码片断如下:

        RssParser parser = new RssParserImpl();
        Rss rss = parser.parse(new URL(url));
        System.out.println(rss.getChannel().getTitle());
        for (Iterator iter = rss.getChannel().getItems().iterator(); iter.hasNext();) {
            Item item = (Item)iter.next();
            System.out.println("<a href=" + item.getLink() + "</a>" + item.getTitle() + " " + item.getPubDate());
        }

    å¦‚上所½Cºï¼Œä»£ç ä¹Ÿæ˜¯ç›¸å½“½Ž€å•,没有转码的需求,旉™—´ä¹Ÿæ­£¼‹®æ˜¾½Cºï¼ˆå› äØ“æ ÒŽœ¬æ²¡åšåˆ†æžåQŒå½“å­—ç¬¦ä¸²ç›´æŽ¥è¿”å›žï¼‰ã€‚ä½†æ˜¯è¯¥å·¥å…·åŒ…åÆˆéžçœŸæ­£å¯¹å¤–å…¬å¸ƒï¼Œä»£ç ä¸­æœ‰äº›ä¸ä¸¥è°}的地方,如System.out的输出,很不爽。而且如果 RSS çš?xml内容如果¾~ºå°‘部分不常用元ç´?åQŒå®ƒä¹Ÿä¼šprintStackTrace一大串åQŒæœäº†å®ƒäº†ã€‚另外还有一个大问题åQŒå°±æ˜¯å½“我用它解æž?癑ֺ¦æ–°é—» 的时候,直接ž®±æŠ¥é”™ï¼šorg.xml.sax.SAXParseException: 字符转换错误åQ?#8220;Unconvertible UTF-8 character beginning with 0xb0”。网上查了查åQŒå¯èƒ½æ˜¯ java 修改˜q‡çš„ UTF-8 和标å‡?UTF-8 些微不兼容导致。详情参çœ?Java òq›_°ä¸­çš„增补字符 ä¸€æ–‡ã€?br />
ä¸?  rsslib4j
    rsslib4j æ˜?sourceforget 上的™å¹ç›®åQŒä¸»™å‰|˜¯ http://sourceforge.net/projects/rsslib4jåQŒçŽ°åœ¨æœ€æ–°çš„ç‰ˆæœ¬æ˜?.2åQŒæ‰0.2åQŒå¯æ˜¯å¼€å‘状态却已经是稳定äñ”品化了。同æ äh”¯æŒæ‰€æœ‰RSS版本ã€?br />     rsslib4j 解析 RSS 的方式和 rssutils ä¸€æ øP¼Œæˆ‘看了看源码åQŒè®¾è®¡æ¯”较简单,代码可读性一般,大量使用if。代码片断如下:

        RSSHandler hand = new RSSHandler();
        RSSParser.parseXmlFile(new URL(url), hand, false);
        RSSChannel ch = hand.getRSSChannel();
        System.out.println(ch.toString());
        LinkedList lst = hand.getRSSChannel().getItems();
        for (int i = 0; i < lst.size(); i++) {
            RSSItem itm = (RSSItem) lst.get(i);
            System.out.println(itm.toString());
       }

    çœ‹è“v来也是相当清晰易懂,执行¾l“果也和rssutilsä¸€æ øP¼Œä¸è¿‡ç”¨å®ƒæ¥è§£æž?癑ֺ¦æ–°é—» 却不会出çŽ?rssutils çš„utf-8¾~–码错误åQŒçœŸæ˜¯å¥‡æ€ªï¼Œä¸¤è€…都是调JAXPçš?SAXParser 。不˜q‡å®ƒçš„代码也有bugåQŒä¸èƒ½è§£æžå‡º channel 的一些信息,查看源码åQŒæœ‰ç‚¹ç®€å•逻辑错误åQŒä¿®æ­£åŽè§£å†³ã€‚想写封email¾l™é¡¹ç›®å¼€å‘者可惜英文不行,通过cvs去commit一下也嫌麻烦,作çÅžã€?br />
æ€È»“

Rome:
ä¼?- 1åQ‰å¯æ‰©å±•性好åQŒæœ‰å‰é€”ã€?åQ‰åŠŸèƒ½å¼ºå¤§ï¼Œé™¤äº†ç”¨æ¥è§£æžRSSåQŒè¿˜å¯ä»¥èšåˆå’Œæž„造RSSã€?br /> åŠ?- 1åQ‰å…¼å®ÒŽ€§å¾…加强åQ?åQ‰ç»‘定jdomã€‚äØ“ä»€ä¹ˆä¸å–œæ¬¢ jdomå‘¢ï¼Œå› äØ“å®ƒapi 老变åQŒè¿˜å¾ˆç»åQŒæžå¾—不兼容ã€?br />
rssutils:
ä¼?- 1åQ‰ä»£ç è®¾è®¡ç²¾å¦™ï¼Œå€¼å¾—学习ã€?åQ‰é™„å¸?taglib 实现åQŒç›´æŽ¥å¯åœ?jsp 中应用ã€?br /> åŠ?- 1åQ‰æ²¡æœ‰æºç ã€?2åQ‰å…¼å®ÒŽ€§æœ‰å¾…加强ã€?3åQ‰åŠŸèƒ½è¾ƒå¼±ï¼Œåªèƒ½ç”¨æ¥è§£æžRSSåQŒæ²¡æœ‰èšåˆå’Œæž„造RSS功能ã€?br />
rsslib4j:
ä¼?- 1åQ‰ç®€å•有效,体积ž®ã€?åQ‰å…¼å®ÒŽ€§ä¸é”™ã€?br /> åŠ?- 1åQ‰æœ‰ž®bugã€?åQ‰åŠŸèƒ½è¾ƒå¼±ï¼Œåªèƒ½ç”¨æ¥è§£æžRSSåQŒæ²¡æœ‰èšåˆå’Œæž„造RSS功能ã€?br />
¾~–辑选择åQ?rsslib4j
我只用来读读新浪新闻åQŒrsslib4j 够用ž®±å¥½åQŒä¸˜q‡è¦è‡ªå·±ä¿®æ”¹å’Œç¼–译源码ã€?br />

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=282333



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ½úÖÝÊÐ| ÖÐÎÀÊÐ| ÖêÖÞÊÐ| ½õÆÁÏØ| º£ÃÅÊÐ| ÎåÕ¯ÏØ| áÓÖÝÊÐ| ÎäÉ½ÏØ| ÇßË®ÏØ| ÁøºÓÏØ| Äþ½òÏØ| À×ÖÝÊÐ| Ì¨Ç°ÏØ| ÖØÇìÊÐ| Åî°²ÏØ| Ûº£ÏØ| ¸»ÄþÏØ| ×ÊÑôÊÐ| ÁÙÇåÊÐ| À¥É½ÊÐ| ¡»¯ÏØ| ½­×ÎÏØ| Ï¿½­ÏØ| ÇàÍ­Ï¿ÊÐ| ËÄ×ÓÍõÆì| °×ÓñÏØ| ͨÐíÏØ| ½ðÕ¯ÏØ| ´óÀóÏØ| ÁÙ°²ÊÐ| Ïã¸ñÀïÀ­ÏØ| À¶ÌïÏØ| ˫ѼɽÊÐ| ¸ñ¶ûľÊÐ| º£°²ÏØ| ÆÖ³ÇÏØ| ÄÚ»ÆÏØ| ·ï¸ÔÏØ| ºÚË®ÏØ| ¸£ÈªÊÐ| Ûº£ÏØ|