XDocument.Load()错误

时间:2011-10-05 19:45:57

标签: c# linq-to-xml

我有一些代码:

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 个答案:

答案 0 :(得分:13)

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,而是提供类型名称。您的下一步应该是查阅文档,当然这也是示例。