Code Bye

xml解析错误

        string body = "<?xml version=""1.0"" encoding=""UTF-8""?><Response service="OrderService"><Head>OK</Head><Body><OrderResponse filter_result="2" destcode="755" mailno="444004757308" origincode="010" orderid="123071100981"/></Body></Response>";
        XmlDocument XmlDoc = new XmlDocument();
        XmlDoc.LoadXml(body);
        Console.WriteLine(XmlDoc.DocumentElement.SelectSingleNode("OrderResponse").Attributes["mailno"].Value);

上面的代码,为什么会报如下错误?
Object reference not set to an instance of an object.

10分
空引用错误,检查到底什么变量是null了

XmlDoc.DocumentElement.SelectSingleNode(“OrderResponse”).Attributes[“mailno”].Value

最好避免这样写一大串点点点

分别赋值给一个变量,先判断是不是null,不是null再点出下面的属性来

body里已经有这个值了,我也知道是空引用,但不知道哪里引起的
比如这样:
if(XmlDoc==null){return;}
var DE=XmlDoc.DocumentElement;
if(DE==null){return;}
var SSN=DE.SelectSingleNode("OrderResponse");
if(SSN==null){return;}
var A=SSN.Attributes["mailno"];
if(A==null || A.Value==null){return;}
Console.WriteLine(A.Value);

除非你能确定某个变量不可能是null,否则都应该这样一层一层的判断

引用 2 楼 qjqmoney 的回复:

body里已经有这个值了,我也知道是空引用,但不知道哪里引起的

像我说的这样改,断点跟,你就知道到底到哪里变成null了,不要靠猜

先找到到底是什么东西null了,再考虑它为什么会是null,就好办的多了

否则完全是在瞎猜

不可能用这种笨办法,明明有值的
90分
.SelectSingleNode("Body/OrderResponse")

你的OrderResponse又不是第一层目录……它外面还有body呢

to starfd:
感谢,一针见血啊

to Z65443344:
感谢您的快速回复,但是我的直觉告诉我,你的方向偏了,肯定不用这么麻烦来定位bug的。

OrderResponse 这个属性在三级目录上 
XmlDoc.DocumentElement.SelectSingleNode 这个是找二级node的
你要先找到body.
然后根据Body这个node再去找子级node
引用 8 楼 qjqmoney 的回复:

to starfd:
感谢,一针见血啊

to Z65443344:
感谢您的快速回复,但是我的直觉告诉我,你的方向偏了,肯定不用这么麻烦来定位bug的。

那是人家有经验,所以不用那么麻烦,肉眼都能看出到底哪里有问题了
作为新手,你还是先从基本开始学起吧


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明xml解析错误