[SQL]使用OPENXML

[SQL]使用OPENXML

練習一下

問題描述

希望從RSS網站得到的訊息格式化輸出

解決方式

以OPENXML的方式將從網站得到的XML資料格式化後以表格方式呈現,這裡以<<聯合新聞網>>國內要聞的RSS訂閱做練習為例

http://udn.com/udnrss/BREAKINGNEWS1.xml

自訂函式 dbo.uf_FetchHtmlContent 可以參照下列網址建立

http://www.dotblogs.com.tw/killysss/archive/2012/09/05/74615.aspx

執行的SQL

-- 資料來源:德瑞克老師的上課筆記+自行修改
USE ProductDB
GO

-- 把將網頁的資料擷取出來
-- function dbo.uf_FetchHtmlContent 可以參照下列網址建立
-- http://www.dotblogs.com.tw/killysss/archive/2012/09/05/74615.aspx
-- 內容要轉型成xml型態,如果檔頭包含<?xml version="1.0" encoding="utf-8"?>,要將檔頭的字串去除
-- i.e SELECT substring(dbo.uf_FetchHtmlContent(@url),39,len(dbo.uf_FetchHtmlContent(@url))-38) AS [網頁內容]  
-- 這裡以<<聯合新聞網>>國內要聞的RSS訂閱做練習
DECLARE @idoc   int;
DECLARE @url nvarchar(500);
DECLARE @content nvarchar(max);
SET @url = N'http://udn.com/udnrss/BREAKINGNEWS1.xml';
SET @content = substring(dbo.uf_FetchHtmlContent(@url), 40, len(dbo.uf_FetchHtmlContent(@url)) - 39);
EXEC sp_xml_preparedocument @idoc OUTPUT, @content
SELECT *
FROM
	openxml(@idoc, '/rss/channel/item', 2) 
	WITH (
		title NVARCHAR(50), 
		link NVARCHAR(256), 
		pubDate NVARCHAR(50), 
		[description] NVARCHAR(250), 
		[guid] NVARCHAR(20))
EXEC sp_xml_removedocument @idoc

結果畫面

pic1

參考資料

德瑞克老師的上課筆記

OPENXML