我有一些代码:
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.
这变得非常令人沮丧。我做错了什么?
答案 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
,而是提供类型名称。您的下一步应该是查阅文档,当然这也是示例。