[英]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.