c# - 从流加载 XmlDocument 时缺少根元素

标签 c# .net xml exception-handling

我有以下代码:

var XmlDoc = new XmlDocument();
Console.WriteLine();
Console.WriteLine(response.ReadToEnd());
Console.WriteLine();

// setup the XML namespace manager
XmlNamespaceManager mgr = new XmlNamespaceManager(XmlDoc.NameTable);
// add the relevant namespaces to the XML namespace manager
mgr.AddNamespace("ns", "http://triblue.com/SeriousPayments/");
XmlDoc.LoadXml(response.ReadToEnd());
XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response", mgr);

while (NodePath != null)
  {
      foreach (XmlNode Xml_Node in NodePath)
      {
          Console.WriteLine(Xml_Node.Name + " " + Xml_Node.InnerText);
      }
  }

我得到:

Root element is missing.

在:

XmlDoc.LoadXml(response.ReadToEnd());

我的 XML 看起来像这样:

<?xml version="1.0" encoding="utf-8"?>
<Response xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://triblue.com/SeriousPayments/">
    <Result>0</Result>
    <Message>Pending</Message>
    <PNRef>230828</PNRef>
    <ExtData>InvNum=786</ExtData>
</Response>

我迷路了。有人可以告诉我我做错了什么吗?我知道我以前有过这个工作,所以我不确定我搞砸了什么。

一如既往,谢谢!

* 我得到答案后进行编辑的原因**

我需要更改线路:

XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response");

到:

XmlElement NodePath = (XmlElement)XmlDoc.SelectSingleNode("/ns:Response", mgr);

没有它这将无法工作。

最佳答案

您似乎正在读取 response 流两次。那样不行,你第二次得到一个空字符串。删除行 Console.WriteLine(response.ReadToEnd()); 或将响应保存到字符串:

string responseString = response.ReadToEnd();
…
Console.WriteLine(reponseString);
…
XmlDoc.LoadXml(responseString);

关于c# - 从流加载 XmlDocument 时缺少根元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6584111/

相关文章:

c# - 过滤数据时简化linq

xml - 停止 xsd.exe 生成多维数组

c# - string.Split C# 将文本保留在定界符之外

.net - 加载程序集的顺序

.net - 引用和平台之间的 Visual Studio 冲突

xml - 使用 python-docx 编辑 float 文本框或编辑 document.xml?

c# - XML 文件 C# 中的错误保存

c# - 从 WCF 服务返回时出现 System.EngineExecutionException

c# - AddIdentity 与 AddIdentityCore

c# - 无法创建 'System.String' 类型的实例