Ошибка XDocument.Load () - PullRequest
       2

Ошибка XDocument.Load ()

7 голосов
/ 05 октября 2011

У меня есть код:

WebRequest request = HttpWebRequest.Create(url);
WebResponse response = request.GetResponse();
using (System.IO.StreamReader sr = 
    new System.IO.StreamReader(response.GetResponseStream()))
{
    System.Xml.Linq.XDocument doc = new System.Xml.Linq.XDocument();
    doc.Load(new System.IO.StringReader(sr.ReadToEnd()));
}

Я не могу загрузить свой ответ в свой XML-документ. Я получаю следующую ошибку:

Member 'System.XMl.Linq.XDocument.Load(System.IO.TextReader' cannot be accessed 
with an instance reference; qualify it with a type name instead.

Это становится действительно разочаровывающим. Что я делаю не так?

1 Ответ

13 голосов
/ 05 октября 2011

В отличие от XmlDocument.Load, XDocument.Load - это статический метод , возвращающий новый XDocument:

XDocument doc = XDocument.Load(new StringReader(sr.ReadToEnd()));

Кажется довольно бессмысленным читать поток до конца , а затем создать StringReader. Во-первых, бессмысленно создавать StreamReader - и если XML-документ не является в UTF-8, это может вызвать проблемы. Лучше:

Для .NET 4, где есть перегрузка XDocument.Load(Stream):

using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        var doc = XDocument.Load(stream);
    }
}

Для .NET 3.5, где нет:

using (var response = request.GetResponse())
{
    using (var stream = response.GetResponseStream())
    {
        var doc = XDocument.Load(XmlReader.Create(stream));
    }
}

Или, в качестве альтернативы, просто позвольте LINQ to XML выполнить все работу:

XDocument doc = XDocument.Load(url);

РЕДАКТИРОВАТЬ: обратите внимание, что ошибка компилятора дала вам достаточно информации, чтобы начать работу: она сказала, что вы не можете назвать XDocument.Load как doc.Load, и вместо этого дать имя типа. Ваш следующий шаг должен был обратиться к документации, которая, конечно, приводит примеры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...