首先,这更多的是一个解决方案,而不是一个问题。我花了一段时间才解决,所以我认为我的解决方案值得分享。
我尝试使用 XDoument.Load(feedUrl)
加载 RSS 提要,并收到上述异常。我检查了feed itself在我的浏览器中,格式看起来不错。因此,在这里找到一些类似情况后:
- Meaning of - <?xml version="1.0" encoding="utf-8"?>
- Why "Data at the root level is invalid. Line 1, position 1." for XML Document?
- LINQ TO XML Parse RSS Feed
以及其他地方: http://www.ipreferjim.com/2014/09/data-at-the-root-level-is-invalid-line-1-position-1/
最佳答案
...我认为这可能不是格式问题,并且相关网站可能会将请求视为机器人并提供替代响应。
事实确实如此!我尝试使用 HttpWebRequest
获取提要(不设置用户代理),但只收到 @
。我尝试使用用户代理,并得到了我想要的 XML。这只是使用 XDocument.Parse()
XDocument doc;
try
{
doc = XDocument.Load(feedUrl);
}
catch (XmlException x)
{
string xml = Utilities.WebGetRequest(feedUrl);
doc = XDocument.Parse(xml);
}
//carry on working with the doc
...
public static string WebGetRequest(string url)
{
try
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)";
Stream objStream;
HttpWebResponse response;
string retVal;
StreamReader objReader;
try
{
response = request.GetResponse() as HttpWebResponse;
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
}
objStream = response.GetResponseStream();
objReader = new StreamReader(objStream);
retVal = objReader.ReadToEnd();
objReader.Dispose();
objStream.Dispose();
response.Dispose();
return retVal;
}
catch (Exception ex)
{
//Log("FeedRequest", url, true, ex); //log it, display it and move on
return "";
}
}
关于.net - XDocument.Load(feedUrl)返回 "Data at the root level is invalid. Line 1, position 1.",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26774752/