我有以下代码:
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);
}
}
我得到了:
缺少根元素。
在:
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);
没有它,这是行不通的。
答案 0 :(得分:14)
您似乎正在阅读response
流两次。它不起作用,你第二次得到一个空字符串。删除行Console.WriteLine(response.ReadToEnd());
或将响应保存为字符串:
string responseString = response.ReadToEnd();
…
Console.WriteLine(reponseString);
…
XmlDoc.LoadXml(responseString);
答案 1 :(得分:4)
您应该将XML读取器输入存储在字符串变量中,因为第二次调用ReadToEnd()
方法时,它无法从流中读取任何内容,因为它已经在最后并返回一个空字符串。
string responseString = response.ReadToEnd()
答案 2 :(得分:1)
Console.WriteLine(response.ReadToEnd()); 它会在第二次读取所有响应内容时读取它agiin
string responsecontent=response.ReadToEnd();
并在任何地方使用responsecontent
答案 3 :(得分:0)
反序列化时,将deserializeRootElementName用作“ root”
XmlDocument xmlResponse = JsonConvert.DeserializeXmlNode(response,“ root”);