分享
 
 
 

通过XML发布新闻

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

新的 RSS 新闻聚合频繁出现,这是因为越来越多的软件开发人员发现:无论是用于商业还是个人使用,该技术在“语言表达”方面确实有效。例如,一个程序员的网络日记可以为记录开发人员在最新项目或感兴趣的解决方案中感受到的喜悦或遇到的挑战提供一个很好的平台。在这篇 Ted Roche 在 4 月发表的 RSS 文章的续篇中,他展示了 Visual FoxPro 开发人员如何能够仅使用几个常用且功能强大的 VFP 命令来轻松地创建 RSS 聚合新闻。

在上个月有关 RSS 的文章中,我谈到了作为一个使用者来使用 RSS,手动读取和编写 RSS,订阅 RSS 聚合新闻以便在新闻阅读器中阅读,以及使用 blogging 软件发布 RSS。本文将探讨使用 Visual FoxPro 以编程方式生成 RSS。我将说明基本的格式,并讨论用 VFP 生成 RSS 的两种方法。

格式

RSS 的历史与很多特定标准类似,不同的团体获得绝对优势地位并声明其合理性,然后分裂并留下旧格式。实际上,现在有两种格式可以考虑:RSS 1.0 和 2.0。(第三个竞争者 Atom ― 有争议,正如它的某些作者所坚持的,根本不是 RSS ― 可能只是一种变体。它正处于早期开发阶段,目前的版本是 3.0,本文不会考虑它,但会对其加以关注。)

尽管有相似之处,RSS 1.0 和 RSS 2.0 仍然由两个对立的阵营所管理。如果您只能支持一个格式,那么 RSS 2.0 似乎是最简单且最普遍的。但是,RSS 1.0 具有更丰富的语法,并且对扩展基本结构的含义有更明确的定义。大多数工具对这两种格式都支持,并且正如我将展示的,在这两种格式中生成“公分母”输出并不是那么困难。

那么,什么是基础结构呢?一个 RSS 文档(也称为“聚合新闻”,因为它们很多都是新闻聚合)包含一个描述信息源(新闻“通道”)的标头和一个带有一篇或多篇文章、新闻头条、引用或者任何随附内容的正文。在 RSS 1.0 中,项是通道元素的同辈,它们在通道元素的 集合中列出。在 RSS 2.0 中,项本身作为子元素包含在通道元素内。上一篇文章展示了 RSS 2.0 的一个示例,由靠近顶部的 版本标记来区分。下面的代码展示了一个典型的 RSS 1.0 feed。请注意,整个文档都包括在 和 标记中。这表现了 RSS 1.0 文档的特性。

xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"

xmlns:admin="http://webns.net/mvcb/"

xmlns="http://purl.org/rss/1.0/"

rdf:about="http://www.tedroche.com"

Ted Roche & Associates, LLC Web

Site

http://www.tedroche.com

Changes to the web site of Ted Roche

& Associates, LLC

en-us

2004-01-07T16:55:48

"http://msdn.microsoft.com/vfoxpro"/"mailto:tedroche@tedroche.com"/"http://www.tedroche.com/ConfGrid#2003"/"http://www.tedroche.com/ConfGrid#2003"New White Papers: VFP and RSSfrom 2003 conferences...]]http://www.tedroche.com/ConfGrid#2003Unknown2004-01-07T16:55:48生成 RSS生成 RSS 的方法有很多种。在上一篇文章中,我提到了 Notepad,它是一种粗糙但有效的工具。在这里,我将以两种不同的方法使用 VFP:textmerge 和 MSXML COM 对象。每种技术都有其优势和劣势。VFP 技术的优势在于其速度和配置的简单性。Textmerge 在速度上占优势:由于所使用的所有对象都是原生 VFP 命令,其生成过程快如闪电。安装生成 RSS 的 VFP 应用程序只需要通常的运行库安装。与之相对,MSXML 对象必须在目标机器上安装和配置;在 Web 服务器上使用它时,我遇到了一些困难,而其他人也报告了类似的问题。原生 VFP 技术避免了这一点。(请注意,XMLToCursor 使用 MSXML COM 对象;如果您要寻求一种“纯粹”的 VFP 解决方案,那么也需要避免这一点。)但是,VFP 没有任何原生功能来验证和操作 XML;因此,生成的聚合新闻可能不正确。最佳示例之一在上述代码块中:新闻聚合的标题是“Ted Roche & Associates,LLC Web Site”,and 字符需要“转义”为 & 格式,以防止分析错误。同样,大于号和小于号也要分别转换为和根据您为聚合新闻选择的字符集,其他字符也应该进行转义,以确保在目标系统上正确显示。除了字符集转换以外,使用 MSXML COM 对象还可以确保完成一些基本的验证。COM 对象将始终生成有效且格式规范的 XML。使用 Visual FoxPro 对象,您需要自己检查 XML。为了简化本文中的技术解释,您可以假定数据来自两个游标:curHead 包含标题、说明以及通道(标头)元素所需的链接信息,curItem 包含每个新闻项的一个记录,并带有该文章的标题、链接和说明。使用 FoxPro textmerge 生成 RSSFoxPro textmerge 可以通过以下代码快速而有效地生成 XML,这段代码将生成一个 RSS 2.0 feed:LOCAL lcXML as String, lcContents as String, lcFileNameSTORE SPACE(0) TO lcXML, lcContents#DEFINE CRLF CHR(13)+CHR(10)lcFileName = "trweb.xml"* Read header informationSELECT cTitle as Title, ;cLink as Link, ;mDesc as Description ;FROM trhead ;INTO CURSOR curHead* Read news itemsSelect TOP 10 cTitle as Title, ;tUpdated as pubDate, ;mContent as Description, ;cLink as link ;FROM trweb ;ORDER BY tUpdated descending ;INTO CURSOR curItem* Generate the items - body'SELECT curItemSET textmerge TO memvar lcXML additiveSET TEXTMERGE ON noshowSCAN\\\\\\ENDSCANSET TEXTMERGE offSET TEXTMERGE to* Generate the heading and channel items and embed* the body withinSet Textmerge To Memvar lcContentsSet Textmerge On Noshow\\RSS generated by--\\\\\\en-us\Copyright\\http://blogs.law.harvard.edu/tech/rss\\60\\\Set Textmerge OffSet Textmerge To* Write it outlcSafety = Set("Safety")Set Safety OffStrtofile(lcContents, lcFileName, 0)Set Safety &lcSafetyFUNCTION HTMLFix(tcString)* This code ASSUMES the incoming string is ANSI,* CHR(32) to (127) and has not already had the* characters converted - it will make a mess of a* string that already has strings like ― in it.LOCAL lcString as stringlcString = STRTRAN(tcString,"&","&")lcString = STRTRAN(lcString,"lcString = STRTRAN(lcString,"","")RETURN ALLTRIM(lcString)下面看一下代码中发生了什么。curItems 游标包含名为“title”、“description”和“link”的字段,用于匹配 XML 主体所需的项。在源表中,这些字段被相应地命名为 cTitle、mDesc 和 cLink,但是它们被生成游标的 SQL SELECT 语句中的别名加以更改。在更多几个代码行中,项目列表是通过 scan 和 textmerge 生成的。然后,用 textmerge 生成主文档,从 curHead 游标取出值,并对其他值(如果您需要扩展该示例,也可以将这些值包含在 curHead 游标中)进行硬编码。最后,用 StrToFile() 写出文件。RFC822Date() 函数是一个简单的 UDF,包含它是为了将所提供的 FoxPro datetime 值转换为 RSS 2.0 规范所需的 RFC 822 格式,如“Thu, 27 Feb 2003 14:11:12 GMT”。(RSS 1.0 规范要求一种由 ISO 8601

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有