【问题标题】:How to set XmlReader with HttpWebResponse如何使用 HttpWebResponse 设置 XmlReader
【发布时间】:2014-08-22 23:48:44
【问题描述】:

我在获取 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 响应,但显然我需要 XmlReader 形式的它,以便我可以在其上运行 LINQ to XML。

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

【问题讨论】:

标签: c# xml linq xmlreader httpwebresponse


【解决方案1】:

虽然这并不能解决实际问题,但可以帮助您达到能够在下载的 XML 上使用 LINQ-to-XML 的目标。

使用XmlReader 并不是能够运行 LINQ-to-XML 的唯一方法。鉴于您能够在字符串变量str 中获取完整的 XML,然后您可以使用 XElement.Parse()XDocument.Parse() 方法将字符串加载到 LINQ-to-XML 的 XElementXDocument 对象:

.....
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
.....

【讨论】:

  • 这很好用,完全忘记了我可以在 XDocument 上运行相同的 LINQ to XML。将其归结为隧道视野。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 2010-11-07
  • 2010-12-22
  • 2012-08-05
相关资源
最近更新 更多