2017-07-05 17 views
0

我從新聞網站RSS獲取數據。我從約20個新聞網站獲得了它。但是,1個網站的RSS是不同的。 20 RSS使用相同的格式,但這個網站的RSS是不同的。我如何在這個不同的RSS中搜索「入口」節點。我在互聯網上搜索這種情況,但我找不到我想要的結果。你可以幫我嗎 ?如何使用不同RSS格式的XmlNode.SelectSingleNode?

這是RSS的正常格式

enter image description here

這是我通常的格式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

enter image description here

回答

1

你的錯誤是錯誤的fil e格式,這種方式不起作用,因爲所有RSS鏈接都不是xml文件,有時rss鏈接返回application/rss + xml內容類型。

例如:NTV

NTV新聞鏈接: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; 
       } 

      } 
+0

謝謝。這對我來說很有用。 –