实现读取RSS 2.0的Javascript类

javascript|rss

这几天在学习一些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了一下而已,所以当然就在此略去了。

完成之后,写一点总结和体会:

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

时间: 2024-08-18 08:24:43

实现读取RSS 2.0的Javascript类的相关文章

Javascript Ajax异步读取RSS文档具体实现

 这篇文章主要介绍了Javascript Ajax异步读取RSS文档具体实现,有需要的朋友可以参考一下 RSS 是一种基于 XML的文件标准,通过符合 RSS 规范的 XML文件可以简单实现网站之间的内容共享.Ajax 是Asynchronous JavaScript and XML的缩写.通过 Ajax 技术可以经由超文本传输协议(Http) 向一个服务器发出请求并且在等待该响应时继续处理另外的数据.通过 Ajax 技术可以很容易实现读取远程 XML文件,因此,可以使用 Ajax技术实现远程访

javascript读取RSS数据_javascript技巧

复制代码 代码如下: <html>  <head>       <title>javascript读取RSS数据</title>   <META content="text/html; charset=utf-8" http-equiv=Content-Type />  </head>  <body  leftmargin="0" topmargin="0"> 

用Ajax读取RSS种子的简单例子

ajax|rss 前段时间参加了第一届AJAX大赛,结果差了几分,第一轮都没过,郁闷中~~~ 其中一题是用AJAX 技术读取RSS种子,感觉对学习AJAX技术很有启发意义,现在把本人的实现代码公布,以供大家学习交流! 题目:使用XMLHttpRequest读取ajaxcn.org的RSS Feed(http://ajaxcn.org/exec/rss),并用HTML的列表标签(UL/OL/LI)列出获取的的Blog条目. 代码实现: <!DOCTYPE html PUBLIC "-//W3

PHP读取RSS feed源的代码(带注释,可读取多个源)

因为网站需要读取不同来源的rss feed,写了一个php程序来循环读取rss feed,为了方便阅读及了解程序实现过程,加上了注释,和大家共同学习.而助易网的rss读取就是在这个程序的基础上稍做改造而成,主要是输出了一个数组字符串以及解决编码问题. php源代码及代码详细解释如下: <?php  //RSS源地址列表数组  $rssfeed = array("http://www.jzxue.com/rss/12.xml",  "http://rss.sina.com

php ajax异步读取rss文档数据_php技巧

RSS(Really Simple Syndication)是一种描述和同步网站内容的格式,是使用最广泛的XML应用.RSS搭建了信息迅速传播的一个技术平台,使得每个人都成为潜在的信息提供者. 本文实例为大家分享了php ajax异步读取rss文档数据的相关代码,供大家参考,具体内容如下 代码如下: index.html <html> <head> <script> function showRSS(str) { if (str.length==0) { documen

非常不错的一个javascript 类_javascript技巧

非常不错的一个javascript 类 复制代码 代码如下: /*    *  Author:aoao  *    Homepage:http://www.loaoao.com  *  Email:loaoao@gmail.com / QQ:2222342  *  Copyright (c) 2006 aoao  *  Licensed under a Creative Commons Attribution 2.5 License (http://creativecommons.org/lic

javascript类继承的一些实验

其实一开始编js没怎么用过对象,一般都用func,func,func···但是用多了,感觉代码一点都不美观,还要这里包一个函数,那里包一个 函数,或者一直都是函数调用,不好看,而且一些重用的都要重写的话就很麻烦(不好意思,对于我这种新手,开始还是一般用func比较高效率···).所以 就决定开始要用object来编程才能更省事,下面就是我看了一些博客文章关于类的见解,有什么不对的希望各位可以多多给些指点: 对于类的编程,声明的方法有如下几种:1.var test = function(){};2

javascript写法: Javascript类的写法

Javascript中function即为类,在function内部用this设置类的public成员变量与方法,例如:function myclass(name){var str = "private string"; //private fieldfunction privatefn(){ //private method alert(str);};this.name = name;this.pubfn = function(){privatefn(); //call privat

RSS 2.0 标准2

rss|标准 可选的频道元素 下面是一个可选的频道(channel)元素的列表. 01.● language名称:language描述:频道使用的语言.比如,在一个网站上,允许聚合所有的意大利语站点到相应的分组.对于这个元素,可使用的值,参阅 Netscape提供的清单.或者可以参阅W3C定义的 清单. 例子:en-us. 02.● copyright名称:copyright描述:频道内容的版权声明. 例子:Copyright 2002, Spartanburg Herald-Journal 0