【问题标题】:Root element is missing error for .net XmlDocument.load().net XmlDocument.load() 的根元素丢失错误
【发布时间】:2009-04-29 18:21:41
【问题描述】:

大家好。

当我将 REST 请求的结果加载到 XmlDocument 中时,我收到了一个 asp.net 错误“缺少根元素”。当我使用 Firefox 插件“RESTTEST”执行相同的 REST 请求时,它看起来很好并返回有效结果。但是错误出现在 C#.net 代码隐藏中。有谁知道这可能是什么原因?以下是相关代码:

HttpWebResponse response = null;
response = (HttpWebResponse)request.GetResponse();
HttpStatusCode statusCode = response.StatusCode;
Stream responseData = response.GetResponseStream();
StreamReader sr = new StreamReader(responseData);
XmlTextReader reader = new XmlTextReader(sr);
XmlDocument doc = new XmlDocument();
doc.Load(sr); // here is where the error occurs.

我的目标是将 REST 请求的结果加载到可遍历的 XML 数据模型中,然后我可以从中获取元素及其值。

当我使用这段代码时,我得到了预期的结果。有什么区别?

while (reader.Read())
{
  switch (reader.NodeType)
  {
    case XmlNodeType.Element: // The node is an Element.
      Response.Write("Element Name: " + reader.Name);
      while (reader.MoveToNextAttribute()) // Read attributes.
      Response.Write(" " + reader.Name + "='" + reader.Value + "'");
      Response.Write("<br />");
      break;
    case XmlNodeType.Text: //Display the text in each element.
      Response.Write("Element value: " + reader.Value);
      Response.Write("Read key=" + reader.Name + ", value=" + reader.Value + "<br/>");
      break;
    case XmlNodeType.EndElement: //Display end of element.
      Response.Write("<br />");
      break;
    }
  }

【问题讨论】:

  • 您能否发布您从 REST TEST 中获得的 Xml,以便我们进行观察。
  • XML 可能不是 XML 或其他格式错误。您能给我们举一个 REST 请求的结果示例吗?

标签: xml xmldocument xmltextreader


【解决方案1】:

看起来 XML 是一个片段,而不是一个完整的 XML 文档——这就是它没有根的原因。要使其工作,您必须配置 XMLDocument 对象以接受片段...

【讨论】:

    【解决方案2】:

    尝试使用sr.ReadToEnd() 查看返回给您的内容。它可能是一个空字符串。

    此外,如果您使用的是 .NET 2.0 或更高版本,则应该使用 XmlReader.CreateXmlTextReader 已弃用。

    有关使用 XML 序列化的示例,请参阅 A REST Client Library for .NET, Part 1。 (抱歉,没有第 2 部分)。

    【讨论】: