源于生活

标题: 新手如何使用PHP创建RSS阅读器 [打印本页]

作者: kevin-ying    时间: 2015-9-24 03:47
标题: 新手如何使用PHP创建RSS阅读器
jacques noah在devshed上发表了一篇关于在php4与任意版本的mysql搭建的平台下创建一个基于php的rss阅读器的文章,rss文档中有三个主要的标签:title,link和description,分别包含着像它们名称提示一样的信息。

jacques列举了来自一个rss文档的两段代码,包含开始部分和结尾部分,并说明创建php的rss阅读器之前所需要的几个步骤。
首先是提取标签所描述的内容。典型的rss文档会是如下的结构:
以下为引用的内容:
[XML] 纯文本查看 复制代码
<rss> 
      <channel>
      <item>
      </item>
      </channel>
      </rss> 

像<items>这样不包含"/"的标签是起始标签,而包含"/"的“</items>”则是结束标签,所以提取内容的函数应该匹配查找“<item></items>”的内容从而获取具体的内容。
jacques同时也讨论了如何运用php所提供的内置函数使得解析文档更为清晰和方便。在创建完必要的函数之后,jacques用函数循环的提取并显示xml文件中的内容。jacques同时向我们展示了当rss阅读器不可用的时候如何通过其他的途径获取到内容,他创建了一个关于rss信息的数据库,用数据库来帮助更新rss文件,并提供了关于这个数据库的数据表和代码示例。


作者: kevin-ying    时间: 2015-9-24 03:49

RSS阅读器制作之将TreeView数据导出为XML数据
[XML] 纯文本查看 复制代码
//递归遍历节点内容,最关键的函数 private void parsenode(treenode tn) { ienumerator ie = tn.nodes.getenumerator(); while (ie.movenext()) { treenode ctn = (treenode) ie.current; //为最底层节点,即该节点为rss节点 if (ctn.getnodecount(true) == 0) { xmlline = getrsstext(ctn); sr.writeline(xmlline); }
using system;
using system.collections;
using system.io;
using system.windows.forms;
namespace treeviewexport
...{
    /**//// <summary>
   /// 将treeview中导出为xml数据
   /// </summary>
   public class treeviewtoxmlb
   ...{
        //xml每行的内容
        private string xmlline = "";
        //用于写xml文件
        private streamwriter sr;
        /**//// <summary>
        /// 构造函数
        /// </summary>
        public treeviewtoxmlb()
        ...{
            
        }
        /**//// <summary>
        /// 将treeview中导出为xml数据
        /// </summary>
        /// <param name="tv">treeview控件</param>
        /// <param name="filename">xml文件的保存路径</param>
        public void exporttoxml(treeview tv, string filename)
        ...{
            sr = new streamwriter(filename, false, system.text.encoding.utf8);
            //写文件头部内容
            //下面是生成rss的opml文件
            sr.writeline("<?xml version="1.0" encoding="utf-8"?>");
            sr.writeline("<opml version="1.0">");
            sr.writeline("<head>");
            sr.writeline("<title>rss</title>");
            sr.writeline("</head>");
            sr.writeline("<body>");
            //遍历根节点
            foreach (treenode node in tv.nodes)
            ...{
                if (node.getnodecount(true) == 0)
                ...{
                    xmlline = getrsstext(node);
                }
                else
                ...{
                    xmlline = getdirectorytext(node);
                }
                sr.writeline(xmlline);
                //递归遍历节点
                parsenode(node);
            }
            //写文件尾部内容
            sr.writeline("</body>");
            sr.writeline("</opml>");
            sr.close();
        }
        //递归遍历节点内容,最关键的函数
        private void parsenode(treenode tn)
        ...{
            ienumerator ie = tn.nodes.getenumerator();
            while (ie.movenext())
            ...{
                treenode ctn = (treenode) ie.current;
                //为最底层节点,即该节点为rss节点
                if (ctn.getnodecount(true) == 0)
                ...{
                    xmlline = getrsstext(ctn);
                    sr.writeline(xmlline);
                }
                else//不是最底层节点,即该节点为目录节点
                ...{
                    xmlline = getdirectorytext(ctn);
                    sr.writeline(xmlline);
                }
                //如果还有子节点则继续遍历
                if (ctn.getnodecount(true) > 0)
                ...{
                    parsenode(ctn);
                }
            }
            sr.writeline("</outline>");
        }
        //成生rss节点的xml文本行
        private string getrsstext(treenode node)
        ...{
            //根据node属性生成xml文本
            string rsstext = "<outline type="rss" text="" + node.text + "" xmlurl="url"/>";
            return rsstext;
        }
        //成生目录节点的xml文本行
        private string getdirectorytext(treenode node)
        ...{
            //根据node属性生成xml文本
            string directorytext = "<outline text="" + node.text + "">";
            return directorytext;
        }
   }
}



作者: kevin-ying    时间: 2015-9-24 03:52
在Web站点中创建和使用Rss源




欢迎光临 源于生活 (http://bbs.vingoo.info/) Powered by Discuz! X3.1