XDocument.Load(feedUrl)返回“根级别的数据无效。第1行,位置1”。

时间:2014-11-06 08:22:16

标签: .net xml rss httpwebrequest linq-to-xml

首先,这是一个解决方案,而不是一个问题。我花了一段时间才解决,所以我认为我的决议可能值得分享。

我试图使用XDoument.Load(feedUrl)加载RSS Feed并获得上述异常。我在浏览器中检查了feed itself,格式看起来不错。所以在找到一些类似的情况之后:

和其他地方: http://www.ipreferjim.com/2014/09/data-at-the-root-level-is-invalid-line-1-position-1/

1 个答案:

答案 0 :(得分:2)

...我认为它可能不是格式化,并且该网站可能会将请求视为机器人并提供备用响应。

事实上,这是事实!我尝试使用HttpWebRequest(不设置使用者)获取Feed,但我只收到@。我尝试使用一个useragent,我得到了我追求的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 "";
      }
  }