解析dom树和生成rss

我们学院的网站做得很烂,上面的新闻不提供rss订阅,每次看新闻都要跑到网站上去,非常不方便。 我现在是就业负责人,万一上面有什么新的通知没有看到,那我的责任就大了。昨天,突然有一个想法, 就是自己为其实现一个rss feed。

首先我考虑的是用rsslib,但发现rss lib生成的xml,普通的rss订阅器不识别,没办法,只能自己想 办法解决,最后自己观察了一个rss的feed,了解了一下基本结构后自己实现了一个。主要有RssDocument 、RssChannel、RssImage、RssItem几个类。其中RssDocument中含有一个RssChannel,RssChannel中含有 一个RssImage和多个RssItem。他们的类关系图如下:

各个类的代码就不解释了,都和简单。唯一值得一提是使用XmlDocument进行操作,这样做的目的:一 个是使用XmlDocument的效率较高,另外一个就是不容易出现错误。当然也可以使用StringBuilder直接对 字符串进行操作。

另外,一件要解决的事情就是如何解析html的问题,开始想用HtmlDocument,后来发现它使用起来不 是很方便,而且效率也不高。但C#中没有提供其他的操作html的工具,我上网上找了一下,发现一个很好 的东西SgmlReader,它可以将html转成标准的xhtml。这样的话,我们就可以用XmlDocument操作转换后的 html了,转换的函数如下:

 public XmlDocument ConvertHtml2Xhtml(string html)
  {
   using (SgmlReader reader = new SgmlReader())
   {
    reader.DocType = "HTML";
    reader.InputStream = new StringReader(html);
    using (StringWriter stringWriter = new StringWriter())
    {
     using (XmlTextWriter writer = new XmlTextWriter(stringWriter))
     {
      reader.WhitespaceHandling = WhitespaceHandling.None;
      writer.Formatting = Formatting.Indented;
      XmlDocument doc = new XmlDocument();
      doc.Load(reader);
      return doc;
     }
    }
   }
  }

下面的工作主要就是分析我们学院网站上新闻的源代码了,找到我要提取的新闻在dom中的位置,为了 速度,我直接从根往下找的,为了方便也可以使用getElementsByTagName的方法进行,不过效率可能受到 一点影响。

读取新闻的代码很简单,就不做任何解析了,不明白的可以留言,我会尽力回答的。

本文配套源码

时间: 2024-10-27 04:36:02

解析dom树和生成rss的相关文章

DOM树节点解析

DOM是解析XML文件的官方标准,它与平台和语言无关.DOM解析将整个XML文件载入并组装成一棵DOM节点树,然后通过遍历.查找节点以读取XML文件中定义的数据.由于DOM解析中把所有节点都载入到内存中,因而它比较耗资源,而且它需要把整棵节点树构建完成后开始读取数据,因而它相对性能也不好:不过由于它在内存中保存了DOM节点树,因而它可以多次读取,并且它的节点树定义比较容易理解,因而操作起来比较简单.关于性能,有人对一些常用的解析方法做了比较: 单位:s(秒)转自:http://www.cnblo

JSP编译成Servlet(一)语法树的生成——语法解析

一般来说,语句按一定规则进行推导后会形成一个语法树,这种树状结构有利于对语句结构层次的描述.同样Jasper对JSP语法解析后也会生成一棵树,这棵树各个节点包含了不同的信息,但对于JSP来说解析后的语法树比较简单,只有一个父节点和n个子节点.例如node1是表示形如<!-- 字符串 -->的注释节点,节点里面包含了一个表示注释字符串的属性:而node2则可能是表示形如<%= a+b %>的表达式节点,节点里面包含一个表示表达式的属性,同样地其他节点可能表示JSP的其他语法,有了这棵

从Chrome源码看浏览器如何构建DOM树

这几天下了Chrome的源码,安装了一个debug版的Chromium研究了一下,虽然很多地方都一知半解,但是还是有一点收获,将在这篇文章介绍DOM树是如何构建的,看了本文应该可以回答以下问题: IE用的是Trident内核,Safari用的是Webkit,Chrome用的是Blink,到底什么是内核,它们的区别是什么? 如果没有声明<!DOCTYPE html>会造成什么影响? 浏览器如何处理自定义的标签,如写一个<data></data>? 查DOM的过程是怎么样的

用XML数据岛结合Dom制作通讯录_XML/RSS

一般情况下,如果要为网站提供一个通讯录程序,需要使用CGI结合后台数据库技术,这对WEB服务器的要求比较高,在很多不提供数据库功能的虚拟主机上甚至无法实现.当然,我们还可以采用TXT文本替代数据库,但TXT文本是比较难操作的,我们必须一行一行的读取判断,还要用分隔字符串实现字段分离,无法进行复杂运算. 现在,我们可以使用"可扩展的标记语言 (XML)" 来保存通讯录的数据,从而体现出XML的优点:表现数据的结构化方法,对于保存许多关系型数据结构的文件很有帮助. 一.基本原理: 在Mic

javascript先序遍历DOM树的方法_javascript技巧

DOM树由文档中的所有节点(元素节点.文本节点.注释节点等)所构成的一个树结构,DOM树的解析和构建是浏览器要实现的关键功能.既然DOM树是一个树结构,那么我们就可以使用遍历树结构的相关方法来对DOM树进行遍历,同时DOM2中的"Traversal"模块又提供了两种新的类型,从而可以很方便地实现DOM树的先序遍历. 注:本文中的5种方法都是对DOM的先序遍历方法(深度优先遍历),并且只关注Element类型. 1. 使用DOM1中的基础接口,递归遍历DOM树 DOM1中为基础类型Nod

jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别

        这篇文章主要是对jQuery向上遍历DOM树之parents(),parent(),closest()之间的区别进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 在这个sprint中,因为要写前端UI,所以用到了jQuery,但是jQuery在向上遍历DOM树的API中,有parents(). parent().closest()这几个,一直不太清楚它们具体的区别,所以狠下心好好读了一下jQuery的API文档,并把区别记在这里,以供参考.    1.parents

python抓取最新博客内容并生成Rss

  本文给大家分享的是使用python抓取最新博客内容并生成Rss的代码,主要用到了PyRSS2Gen方法,非常的简单实用,有需要的小伙伴可以参考下. osc的rss不是全文输出的,不开心,所以就有了python抓取osc最新博客生成Rss ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 4

php生成RSS订阅的方法

 本文实例讲述了php生成RSS订阅的方法.分享给大家供大家参考.具体分析如下: RSS(简易信息聚合,也叫聚合内容)是一种描述和同步网站内容的格式.RSS可以是以下三个解释的其中一个: Really Simple Syndication:RDF (Resource Description Framework) Site Summary: Rich Site Summary.但其实这三个解释都是指同一种Syndication的技术.RSS目前广泛用于网上新闻频道,blog和wiki.使用RSS订

数据-赫夫曼树的生成,完成赫夫曼编码的输出

问题描述 赫夫曼树的生成,完成赫夫曼编码的输出 实现赫夫曼树的生成,完成赫夫曼编码的输出: 要求 利用动态分配数组存储赫夫曼树,设计一组输入数据(要求为二元组,分别为字符集与每个字符出现的频率),能够对其进行如下操作: 1)对输入的数据构造成一棵Huffman 树. 2)根据生成的Huffman 树进行Huffman 编码,实现对输入数据的Huffman 编码输出. 我承认这是一个作业贴,但确实没时间做了 才来找人帮忙的