簡體   English   中英

SyndicationFeed-無法讀取網址,錯誤行和位置

[英]SyndicationFeed - can't read url, error row and position

我在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;
                }

類似的問題,我真的需要某種打擊。

提前謝謝了。

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

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;
            }

對我來說,此解決方案有效的答案。

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;
        }

也許不是最好的方法,但是它可以工作。 非常感謝亞歷山大為我的問題提供的提示和解決方案。

暫無
暫無

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

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