透過XML釋出新聞(轉)
透過XML釋出新聞(轉)[@more@] 新的 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="" xmlns:dc="" xmlns:sy="" xmlns:admin="" xmlns=""> rdf:about=""> Changes to the web site of Ted Roche & Associates, LLC en-us 2004-01-07T16:55:48 ""/> "mailto:tedroche@tedroche.com"/> "/ConfGrid#2003"/> - "/ConfGrid#2003">
from 2003 conferences...]]> /ConfGrid#2003 Unknown 2004-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 生成 RSS FoxPro textmerge 可以透過以下程式碼快速而有效地生成 XML,這段程式碼將生成一個 RSS 2.0 feed: LOCAL lcXML as String, lcContents as String, lcFileName STORE SPACE(0) TO lcXML, lcContents #DEFINE CRLF CHR(13)+CHR(10) lcFileName = "trweb.xml" * Read header information SELECT cTitle as Title, ; cLink as Link, ; mDesc as Description ; FROM trhead ; INTO CURSOR curHead * Read news items Select 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 curItem SET textmerge TO memvar lcXML additive SET TEXTMERGE ON noshow SCAN -
<> <> <> ENDSCAN SET TEXTMERGE off SET TEXTMERGE to * Generate the heading and channel items and embed * the body within Set Textmerge To Memvar lcContents Set Textmerge On Noshow > --> <> <> en-us Copyright <> <> http://blogs.law.harvard.edu/tech/rss <> 60 <> Set Textmerge Off Set Textmerge To * Write it out lcSafety = Set("Safety") Set Safety Off Strtofile(lcContents, lcFileName, 0) Set Safety &lcSafety FUNCTION 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 string lcString = 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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10763080/viewspace-948389/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 透過XSL轉換XML檔案 (轉)XML
- 新聞營銷:釋出新聞稿的效果有哪些?
- PHP透過DOM操作XMLPHPXML
- 為什麼要釋出新聞稿?新聞稿釋出推廣宣傳價值幾何?
- 釋出新聞稿必須瞭解的幾個問題
- 2002年蘋果公司突出新聞 (轉)蘋果
- 基於百度UEditor實現後臺釋出新聞功能
- 釋出新聞稿必須知道的七大SEO技巧
- Redmine釋出新聞,自動傳送郵件功能失效恢復
- 網際網路新聞擬出新規:轉載新聞不得歪曲標題原意
- dotnet core微服務框架Jimu ~ 瀏覽和釋出新聞微服務微服務框架
- linux 透過xmllint處理xml檔案LinuxXML
- Novell釋出新版桌面Linux 期望超越Windows(轉)LinuxWindows
- Oracle釋出新版BerkeleyDB嵌入式資料庫(轉)Oracle資料庫
- 經歷虛假新聞指責後,Facebook擬推出新聞專案
- 透過API訪問IE Cache (轉)API
- 透過硬碟安裝 Linux(轉)硬碟Linux
- 透過debootstrap安裝Debian(轉)boot
- 釋出新戰略,榮聯科技集團開啟轉型之路
- [譯] Go 釋出新版 Protobuf APIGoAPI
- 自動釋出新浪微博javaJava
- 透過socket訪問資料庫(轉)資料庫
- xml應用(2): 透過向xsl傳遞引數+資料島方式,實現在客戶端單個xml的分框架顯示 (轉)XML客戶端框架
- “文章助手”小程式釋出新版 0.3.0
- 谷歌推出新購物功能等上週產品新聞 - Angel谷歌
- 透過tab鍵實現命令補齊 (轉)
- 直接透過DAO讀、寫Access檔案 (轉)
- JSP透過JDBC與Oracle相連 (轉)JSJDBCOracle
- 透過分析TCO來完成企劃案(轉)
- 透過 Mini.iso 安裝Debian(轉)
- 一個例子:在EBS透過XML Publisher輸出儲存在Blob的圖片XML
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- XML簡明教程(8)什麼是經過型別定義的XML值(轉)XML型別
- 透過例項看VCL元件開發全過程(一) (轉)元件
- 透過例項看VCL元件開發全過程(二) (轉)元件
- XML 程式設計思想: 使用 Atom 格式連鎖新聞及其他內容(轉)XML程式設計
- 企業如何透過資料資產化,啟用“資料要素x”,乘出新質生產力
- RabbitMQ中釋出者透過確認機制確保訊息釋出MQ