demoshop

demo, trying to be the best_

上一篇所介紹的擷取方式,是當您要擷取的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的教學啦@@

回應討論