擷取RSS至您的網站中 PART II
- 2008-01-26
- 13148
- 0
上一篇所介紹的擷取方式,是當您要擷取的RSS是標準的節點,如果您要擷取的RSS出現了自訂的節點,您就要參考此篇的方法抓取了。
我們拿diggirl的今日熱門美女的RSS來作範例
■RSS位置:http://www.diggirl.net/hottodayrss.jsp
因為這個RSS使用了自訂標籤,所以我們必須改變方式來抓取
▲ASPX頁面
<asp:Panel ID="Panel2" runat="server" GroupingText="diggirl.net今日熱門美女" Width="100%"> <asp:DataList ID="DataList1" runat="server" Width="100%" EnableViewState="False" RepeatColumns="5" RepeatDirection="Horizontal" ShowFooter="False" ShowHeader="False"> <ItemTemplate> <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='' Target="_blank" Text='' ImageUrl=''></asp:HyperLink> </ItemTemplate> <ItemStyle HorizontalAlign="Left" /> </asp:DataList> <asp:Literal ID="litError2" runat="server" EnableViewState="False"></asp:Literal> </asp:Panel>
▲CS頁面
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { this.DataList1.DataSource = readRss("http://www.diggirl.net/hottodayrss.jsp", litError2); this.DataList1.DataBind(); } } DataTable readRss(string url, Literal error) { XmlDocument xmlDoc = new XmlDocument(); try { xmlDoc.Load(url); } catch { error.Text = "系統繁忙,暫不提供此資訊..."; } DataTable dt = new DataTable(); dt.Columns.Add("title"); dt.Columns.Add("link"); dt.Columns.Add("photo"); int i; for (i = 0; i < 10; i++)//我只抓九筆新聞 { XmlNode xNode = xmlDoc.SelectNodes("//item").Item(i); string photo = xmlDoc.SelectNodes("rss/channel/item/*[6]/@url").Item(i).InnerText;//直接指定位子去抓到他的文字 if (xNode != null) { string title = xNode.SelectSingleNode("title").InnerText; string link = xNode.SelectSingleNode("link").InnerText; if (title.Length > 30)//如果標題大於30個字作以下修改 { title = title.Substring(0, 30) + "...."; } dt.Rows.Add(title, link, photo);//把抓到的欄位都丟到DataTable內 } else { error.Text = "目前無美女..."; break; } } return dt; }
?小鋪廢言: rss/channel/item/*[6]/@url 是表示我們要抓的是在RSS父節點下的channel下的item中第6個標籤識別值是url,了解了此用法,不管RSS發佈的是使用啥自訂標籤我們都可以正確的抓到啦,這次的RSS教學到這,如果demo再抓取RSS又出現了問題就會出現PART III的教學啦@@
回應討論