簡體   English   中英

如何以不同的RSS格式使用XmlNode.SelectSingleNode?

[英]How to use XmlNode.SelectSingleNode in different RSS format?

我從新聞網站RSS獲取數據。 我是從大約20個新聞網站上獲得的。 但是,1個網站的RSS是不同的。 20 RSS使用相同的格式,但是此網站的RSS不同。 如何在此不同的RSS中搜索“入口”節點。 我在互聯網上搜索了這種情況,但找不到所需的結果。 你能幫助我嗎 ?

這是RSS的正常格式

在此處輸入圖片說明

這是我的標准格式RSS代碼

XmlDocument xdoc = new XmlDocument();

        xdoc.Load("http://www.milliyet.com.tr/rss/rssNew/gundemRss.xml");

        XmlElement el = (XmlElement)xdoc.SelectSingleNode("/rss");

        if (el != null)
        {
            el.ParentNode.RemoveChild(el);
        }
        XmlNode Haberler = el.SelectSingleNode("channel");

        List<Milliyet> newMilliyet = new List<Milliyet>();


        foreach (XmlNode haber in Haberler.SelectNodes("item"))
        {
            var link = haber.SelectSingleNode("link").InnerText;

            if (MilliyetHaberList.ContainsKey(link))
                continue;

這是不同格式的RSS

在此處輸入圖片說明

您的錯誤是錯誤的文件格式,這種方式無法正常工作,因為所有RSS鏈接都不是xml文件,有時rss鏈接返回了application / rss + xml內容類型。

例如:NTV

NTV rss鏈接: http : //www.ntv.com.tr/gundem.rss

如果您使用郵遞員並獲取此鏈接,您將看到內容類型:application / rss + xml

你應該像這樣使用HttpRequest

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://www.ntv.com.tr/gundem.rss");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        StreamReader stream = new StreamReader(response.GetResponseStream());

        string responseString = stream.ReadToEnd();

        string xmlString = responseString.Replace("xmlns=\"http://www.w3.org/2005/Atom\"", "");

        XmlDocument xdoc = new XmlDocument();

        xdoc.LoadXml(xmlString);

        var feedNode = xdoc.LastChild;

        XmlNodeList entries = feedNode.SelectNodes("entry");
        List<NTV> NTVNewsList = new List<NTV>();


        foreach (XmlNode entry in entries)
        {
            NTV NTVInstance = new NTV();
            foreach (XmlNode child in entry.ChildNodes)
            {
                string childName = child.Name;
                switch (childName)
                {
                    case "title":
                        NTVInstance.Title = child.InnerText;
                        break;
                    case "summary":
                        NTVInstance.Description = child.InnerText;
                        break;
                    case "published":
                        string dateStr = child.InnerText;
                        NTVInstance.PubDate = Convert.ToDateTime(dateStr);
                        break;
                    case "link":
                        NTVInstance.Link = child.Attributes["href"].Value;
                        NTVInstance.Tags = GetTags(NTVInstance.Link);

                        break;
                    default:
                        break;
                }

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM