实现读取RSS 2.0的Javascript类

原创 2006年05月23日 15:28:00
这几天在学习一些Javascript的东西,新入手,很差,只好自己写一些小例子练手。嗯,放在这里做备份吧。

这是一个能够用于读取RSS 2.0信息,并把读到的东西变成Javascript对象的类。和网上能搜到的代码相比,我这个非常的粗糙,封装的也不一定合理,反正作为练习嘛,达到目的就成

首先当然是要搞清楚RSS 2.0的结构,它最基本的骨架如下:

<?xml version="1.0"?>
<rss version="2.0">
  <channel>
    <title></title>
    <link></link>
    <description></description>
    <item>
      <author></author>
      <title></title>
      <description></description>
      <link></link>
      <pubDate></pubDate>
    </item>
  </channel>
</rss>

嗯,这并不是最标准的RSS,而是最简单的RSS。实际的RSS标准可以看http://blogs.law.harvard.edu/tech/rss,还是很复杂的!

然后,为了方便读取RSS的XML中每一个结点的内容,做了一个直接从XML转成Javascript对象的函数,嗯,这个函数可以直接根据Javascript对象的结构来获取数据哦,也就是类似于ORM的东西啦。

function getXmlData(xml, obj) {
  for (o in obj) {
    if ("object" == typeof(obj[o])) {
      getXmlData(xml.getElementsByTagName(o), obj[o]);
    } else {
      obj[o] = getXmlNodeText(xml.getElementsByTagName(o).item(0));
    }
  }
}

哦,对了,还有个函数getXmlNodeText没写,这是用来读取XML结点内容的函数。说起来真的很不爽,IE和Gecko在XML DOM的接口方面实在太不统一了,连获取一个结点的内容都不同,IE是.text,Gecko是.textContent。没办法,只好写个函数封装一下了……

function getXmlNodeText(node) {
  var undefined;

  if (undefined !== node.text) {
    return node.text;
  } else if (undefined !== node.textContent) {
    return node.textContent;
  }
 
  return undefined;
}

接下来就是要写这个RSS类了。为了把数据和控制分离,这个RSS类并不包含任何远程访问的代码,仅仅是根据输入的xml结点来获取里面所有的数据。哦,对了,这个类几乎完全没有考虑异常保护的问题……

function RssReader(xml) {
  /** Retrieve the information of the tag "channel" in RSS.
    @param[in] channel The <channel> node, which is the direct child of <rss>
    @return Header object, including title, link and description.
  */
  function getHeader(channel) {
    var header = {
      title: 0,
      link: 0,
      description: 0
    };
   
    getXmlData(channel, header);
  
    return header;
  }
 
  /** Retrieve the information of the tag "item" in RSS.
    @param[in] item The <item> node, which is the direct child of <channel>
    @return Item object, including author, title, link, description and pubDate.
  */
  function getItem(item) {
    var info = {
      author: 0,
      title: 0,
      link: 0,
      description: 0,
      pubDate: 0
    };
   
    getXmlData(item, info);
   
    return info;
  }

  var rss = xml.documentElement;
  var channel = rss.getElementsByTagName("channel").item(0);

  this.header = getHeader(channel);
  this.items = [];
 
  var item = channel.getElementsByTagName("item");
 
  for (var i = 0; i < item.length; i++) {
    this.items.push(getItem(item.item(i)));
  }
}

好了,到最后了!当然是要开始访问远程的RSS Feed了。嗯,这个东西当然就和XMLHTTP的使用有关了,相关的内容已经很成熟了,我也差不多只是CP了一下而已,所以当然就在此略去了。

完成之后,写一点总结和体会:
  1. Javascript中做ORM很简单,甚至于非常的理所当然。这是因为对于任意一个Object(假设叫obj),它的属性(假设叫attrib)天生就有两种访问方式,obj.attribobj["attrib"]。再加上for..in的强大功能,从XML到Javascript Object很容易就无敌了。
  2. 从XML到Javascript 对象的过程其实也可以看作从XML到JSON的过程,反过来也很容易实现。嗯,如果把getXmlData加强,就可以得到一个XML直接映射到JSON的解决方案,貌似挺不错的。
  3. 一开始我并不了解XMLHTTP的安全性问题,所以相反比较浪漫……后来略微浏览了一下AJAX in Action才了解这些细节的东西……原来,XMLHTTP对象不能够随便访问任意一个网站,只能访问当前网站下的其他网页。如果这样做了,浏览器就会报错。嗯,我还试过,如果服务器Redirect到其他URL,XMLHTTP能够自动去访问其他URL,不过在安全性上面还是遵循上面的原则。
  4. 嗯,Javascript的东西,真的比较好玩~

读取站点更新纪录(RSS2.0) - php篇 :新浪,雅虎新闻,csdn blog...

本文链接地址:http://blog.csdn.net/thefirstwind/archive/2007/01/18/1486536.aspx作者:邢晓宁时间:2007年1月18日声明:版权没有,随...
  • thefirstwind
  • thefirstwind
  • 2007年01月18日 11:48
  • 5953

JavaScript 解析 xml 文件 如 rss订阅

jFeed 是一个通用的 RSS/ATOM 解析器jQuery插件jFeed 支持 RSS 0.91, 0.92, 1.0, 2.0 和 Atom 1.0 等格式。使用方法:jQuery.getFee...
  • huozhicheng
  • huozhicheng
  • 2010年12月10日 18:10
  • 1431

用js直接读取Rss新闻的两种方法

在这里我主要是用了两种方法:第一种是直接用js来访问,这种方法的优点是简单,但缺点是不能在firefox上使用第二种是用prototype进行实现,当然对ie和firefox就都能满足了但不论你是用哪...
  • hcz202202
  • hcz202202
  • 2009年03月13日 12:51
  • 507

Java 中如何实现RSS 2.0

最后努力一把,争取今天上排名,提前一天完成任务。好高兴。 这个同样是给初学的一点东西,请大家不要见笑。在这里我用 dom4j来写xml,希望ice不要再来找我麻烦了,我这个人喜欢用File啊,呵呵,虽...
  • lkmplwxf
  • lkmplwxf
  • 2006年05月07日 17:42
  • 1433

jQuery 获取跨域XML(RSS)数据相关总结

前段时间项目,需要前端JS获取跨域XML(RSS),最先打算使用jQuery.ajax方法获取,但是在ie9以下,提示“拒绝访问的” 略尴尬,网上查找了相关资料总结了以下几种方法: 一、google的...
  • yw39019724
  • yw39019724
  • 2014年03月06日 14:42
  • 4160

js解析RSS类

因为最近在项目中用到了RSS频道,所以今天就花了点时间写了一个JS来解析RSS频道的类,说白了就是JS解析XML文件而已,呵呵.我的这个JS类提供解析XML返回JSON对象,便于操作结果集.目前只支持...
  • liuysheng
  • liuysheng
  • 2011年08月17日 22:09
  • 1936

RSS读取与生成实现原理

package com.csst.ebt.app; import java.io.StringReader; import java.util.List; import net.sf.json.JS...
  • cdh1213
  • cdh1213
  • 2015年01月30日 14:07
  • 1516

C#读取RSS的方法

//读取RSS函数LoadRSS //参数RssURl 为RSS路径 //参数RssCount为读取的RSS条数 public string LoadRSS(string RssUrl , int R...
  • sy_binbin
  • sy_binbin
  • 2009年02月14日 08:12
  • 2639

Python中用feedparser解析RSS

RSS 是用于分发 Web 站点上的内容的摘要的一种简单的 XML 格式。 一、feedparser的安装  下载一个安装包,然后用Windows命令行cd到那个目录下面 输入 pyt...
  • tianbwin2995
  • tianbwin2995
  • 2016年02月29日 11:25
  • 560

RSS2.0规范简易说明

直接贴上一个rss的说明,标签的注释部分代表可选标签,内部子标签同样使用注释代表可选标签。 订阅频道名称...
  • zhuxinquan61
  • zhuxinquan61
  • 2016年05月03日 11:18
  • 684
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现读取RSS 2.0的Javascript类
举报原因:
原因补充:

(最多只允许输入30个字)