C# 如何使用HttpWebResponse设置XmlReader

C# 如何使用HttpWebResponse设置XmlReader,c#,xml,linq,xmlreader,httpwebresponse,C#,Xml,Linq,Xmlreader,Httpwebresponse,我在获取HttpWebResponse并将其设置为XmlReader时遇到了一个问题,通过我迄今为止查找的示例,我得到了以下结论: HttpWebResponse response = (HttpWebResponse)request.GetResponse(); XmlReader xmlReader; if (response != null) { StreamReader sr = new StreamReader(response.GetResponseStream());

我在获取HttpWebResponse并将其设置为XmlReader时遇到了一个问题,通过我迄今为止查找的示例,我得到了以下结论:

HttpWebResponse response = (HttpWebResponse)request.GetResponse();
XmlReader xmlReader;
if (response != null)
{
    StreamReader sr = new StreamReader(response.GetResponseStream());
    //string st = sr.ReadToEnd().Trim();
    xmlReader = XmlReader.Create(sr);
}
但问题是xmlReader没有被整个响应填满,我得到的部分响应甚至不是有效的XML(在某些节点上没有结束标记),这在以后尝试读取该变量时会导致问题

但如果我取消注释以下行以进行测试:

string str = sr.ReadtoEnd().Trim();
变量str填充了整个XML响应,但显然我需要XML读取器形式的str,以便在其上运行LINQ to XML


我的问题是,确保在XmlReader对象中获得完整响应的最佳方法是什么?

虽然这并不能解决实际问题,但可能有助于实现在下载的XML上使用LINQ to XML的目标

使用
XmlReader
并不是运行linqtoxml的唯一方法。假设您能够在字符串变量
str
中获取完整的XML,那么您可以使用或方法将字符串加载到LINQ to XML的
XElement
XDocument
对象:

.....
StreamReader sr = new StreamReader(response.GetResponseStream());
string str = sr.ReadToEnd().Trim();
XDocument doc = XDocument.Parse(str);
//at this point you can continue doing necessary LINQ-to-XML operations
.....

您可以尝试UTF-8编码:StreamReader sr=newstreamreader(response.GetResponseStream(),encoding.UTF8);我完全忘记了我可以在XDocument上运行相同的LINQ到XML。把它归为隧道视野。