广 告
信息技术应用 >>  js解析RSS
热 

js解析RSS
作者:铁木箱子    转贴自:http://ferreousbox.javaeye.com/blog/154068    点击数:6218    文章录入: zhaizl

  1. 因为最近在项目中用到了RSS频道,所以今天就花了点时间写了一个JS来解析RSS频道的类,说白了就是JS解析XML文件而已,呵呵.我的这个JS类提供解析XML返回JSON对象,便于操作结果集.目前只支持RSS2.0规范的解析,不过我这个JS类也很简单的,只获取title和link字段,其他的就不管了,呵呵,所以对RSS1.0和RSS0.9规范应该都是可以支持的,以后再有时间完善吧.另外,本来是想在web页面上直接访问RSS频道地址来的,可忘记了AJAX是不允许跨域访问的,所以也就只能在后台写一程序去获取RSS的内容,然后生成在本地磁盘上,最后web页面直接访问本地的XML文件了.
    01
    /**
  2. 02 * @title:Rss频道的读取与解析类.
  3. 03 * @author:铁木箱子
  4. 04 * @modify:2008-1-8
  5. 05 */
  6. 06
  7. 07 function RssReader(){};
  8. 08 RssReader.prototype= {
  9. 09 /**
  10. 10 * 获取RSS并解析.该方法是综合了getRss和parseXmlToJSON两个方法,最终的回调函数的值为json对象.
  11. 11 */
  12. 12 getAndParse : function(/*string*/_url, /*function*/callback) {
  13. 13 var parseXml = this.parseRss;
  14. 14 this.getRss(_url, function(rssXml) {
  15. 15 var json = parseXml(rssXml);
  16. 16 callback(json);
  17. 17 });
  18. 18 },
  19. 19
  20. 20 /**
  21. 21 * 获取rss频道的xml文件内容,以xml对象返回.
  22. 22 * @param _url 要获取的RSS的URL地址
  23. 23 * @param callback 获取成功或失败后的回调方法,参数为RSS内容的XML对象(失败则返回null)
  24. 24 */
  25. 25 getRss : function(/*string*/ _url, /*function*/callback) {
  26. 26 new Ajax.Request(
  27. 27 _url,
  28. 28 {
  29. 29 method : 'GET',
  30. 30 onComplete : function(xmlHttp) {
  31. 31 var rssXml = xmlHttp.responseXML;
  32. 32 if (rssXml == null) alert('非法的RSS频道内容,无法解析!');
  33. 33 callback(rssXml);
  34. 34 }
  35. 35 }
  36. 36 );
  37. 37 },
  38. 38
  39. 39 /**
  40. 40 * 将RSS频道的XML内容转换成JSON对象返回.
  41. 41 */
  42. 42 parseRss : function(/*object*/rssXml) {
  43. 43 try {
  44. 44 var rss = rssXml.getElementsByTagName('rss');
  45. 45 var channel = rssXml.getElementsByTagName('channel');
  46. 46 if (!rss || !channel || rss.length != 1 || channel.length < 1) {
  47. 47 alert('无效的RSS格式:没有rss节点和channel节点!');
  48. 48 return null;
  49. 49 }
  50. 50 var version = rss.item(0).getAttribute('version');
  51. 51 if (!version) {
  52. 52 alert('无效的RSS格式:没有指定RSS版本号!');
  53. 53 return null;
  54. 54 }
  55. 55 if (version == '2.0') return RssReader.parseRss2_0(channel.item(0));
  56. 56
  57. 57 alert('无效的RSS格式:无法确定RSS版本!');
  58. 58 return null;
  59. 59 } catch (ex) {
  60. 60 alert('解析RSS内容时发生错误:' + ex.message);
  61. 61 return null;
  62. 62 }
  63. 63 }
  64. 64 };
  65. 65
  66. 66 /**
  67. 67 * Rss2.0格式的静态解析方法,返回结果为JSON对象.
  68. 68 * 返回的JSON格式为:
  69. 69 * {"items" : [ {"title" : "标题", "link" : "连接地址"},
  70. 70 * {"title" : "标题", "link" : "连接地址"},
  71. 71 * {"title" : "标题", "link" : "连接地址"}
  72. 72 * ]
  73. 73 * }
  74. 74 * 使用方法为(假设最终返回的对象名称为json):
  75. 75 * json.items.length - 获取总的信息的条数
  76. 76 * json.items[i] - 获取每一条信息的对象(其中0<=i
  77. 77 * json.items[i].title - 获取单条信息的标题文字
  78. 78 * json.items[i].link - 获取单条信息的连接地址
  79. 79 */
  80. 80 RssReader.parseRss2_0 = function(/*object*/channel) {
  81. 81 var items = channel.getElementsByTagName('item');
  82. 82 var json = '{"items":[';
  83. 83 for (var i = 0; i < items.length; i ++) {
  84. 84 var item = items.item(i);
  85. 85 var _title = item.getElementsByTagName('title')[0];
  86. 86 var _link = item.getElementsByTagName('link')[0];
  87. 87 if (!_title.hasChildNodes() || !_link.hasChildNodes()) continue;
  88. 88 json += '{"title":"' + _title.firstChild.nodeValue.gsub(/"/,"'") + '",';
  89. 89 json += '"link":"' + _link.firstChild.nodeValue.gsub(/"/,"'") + '"}';
  90. 90 if (i < items.length - 1) json += ',';
  91. 91 }
  92. 92 json += ']}';
  93. 93 //alert(json);
  94. 94 return eval('(' + json + ')');
  95. 95 };
  • 上一篇文章: RSS解析

  • 下一篇文章: 给ueditor编辑器赋值
  •   最新5篇热点文章
      最新5篇推荐文章
      相关文章
    ·给ueditor编辑器赋值[304]
    ·神七伴飞卫星飞百天 中国初步掌…[617]
    ·HLA-A蛋白增加移植排斥[617]
    ·污染物影响条纹鲈鱼幼鱼发育[617]
    ·精神分裂症的新候选基因[617]
    ·C# Request.ServerVariables2[697]
    ·Request.ServerVariables[700]
    ·浅析C# List实现原理[702]
    ·龙芯3a7000最新进展[702]
    ·Request.ServerVariables 获取…[703]
     
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)