2016-09-20 61 views
0

即時通訊SyndicationFeed存在一些問題,拋出一個我找不到的異常,一直在尋找答案。已經嘗試了其他用戶建議的大部分解決方案,但沒有運氣。這裏是代碼。SyndicationFeed - 無法讀取網址,錯誤的行和位置

// the feed that will throw Exception. 
var stream = "http://www.gamespot.com/feeds/news/"; 

    try 
       { 
        var settings = new XmlReaderSettings() 
        { 
         ProhibitDtd = false, 
         IgnoreComments = true 
        }; 

        using (XmlReader xmlReader = XmlReader.Create(stream, settings)) 
        { 
         xmlReader.Read(); 

         var t = 0; 

         var rss = new Rss20FeedFormatter(); 
         var atom = new Atom10FeedFormatter(); 
         _feed = new SyndicationFeed(); 
         // the problem is here when i try to load to 
         // the feed with xmlReader, for some reason the 
         //feed can't read the xmlReader. getting row and 
         //position error. 
         if (atom.CanRead(xmlReader)) 
         { 
          _feed = SyndicationFeed.Load(xmlReader); 
         } 
         else if (rss.CanRead(xmlReader)) 
         { 
          _feed = SyndicationFeed.Load(xmlReader); 
         } 
         xmlReader.Close(); 
        } 
       } 
       catch (Exception ex) 
       { 
        var message = ex.Message; 
       } 

similar problem 我真的需要某種形式的打擊。

非常感謝提前。

回答

0

問題出在緩存節點上,在解析之前將其刪除。

var stream = "http://www.gamespot.com/feeds/news/"; 

      try 
      { 
       var settings = new XmlReaderSettings() 
       { 
        ProhibitDtd = false, 
        IgnoreComments = true, 
        IgnoreWhitespace=true 
       }; 

       string xml = new WebClient().DownloadString(stream); 

       XDocument doc = XDocument.Parse(xml); 
       doc.Descendants().Where(e => e.Name == "cache").Remove(); 

       using (Stream memoryStream = new MemoryStream()) // Create a stream 
       { 
        doc.Save(memoryStream);  // Save XDocument into the stream 
        memoryStream.Position = 0; // Rewind the stream ready to read from it elsewhere 

        using (XmlReader xmlReader = XmlReader.Create(memoryStream, settings)) 
        { 
         xmlReader.Read(); 

         var rss = new Rss20FeedFormatter(); 
         var atom = new Atom10FeedFormatter(); 
         var _feed = new SyndicationFeed(); 
         // the problem is here when i try to load to 
         // the feed with xmlReader, for some reason the 
         //feed can't read the xmlReader. getting row and 
         //position error. 
         if (atom.CanRead(xmlReader)) 
         { 
          _feed = SyndicationFeed.Load(xmlReader); 
         } 
         else if (rss.CanRead(xmlReader)) 
         { 
          _feed = SyndicationFeed.Load(xmlReader); 
         } 
         xmlReader.Close(); 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       var message = ex.Message; 
      } 
+0

「doc.Save(memoryStream); //將XDocument保存到流」 即時獲得這部分錯誤。做了一些轉換,所以它會返回一個字符串,但它是空的。 –

+0

在我的控制檯應用程序中不會有任何異常。什麼是XML變量? – Alexandr

0

在這個解決方案中工作的答案,對我來說。

public XmlReader CleanXdocument(XmlReader xmlReader) 
     { 
      var xdoc = new XDocument(); 
      xdoc = XDocument.Load(xmlReader); 
      if (xdoc.Descendants("cache").Any()) 
      { 
       xdoc.Descendants().FirstOrDefault(e => e.Name == "cache").Remove(); 
      } 
      var str = xdoc.ToString(); 
      TextReader tr = new StringReader(str); 
      xmlReader =XmlReader.Create(tr); 

      return xmlReader; 
     } 

也許不是最好的辦法,但它的工作原理。非常感謝Alexandr提出並解決我的問題。