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); 上面的代码,为什么会报如下错误? |
|
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,否则都应该这样一层一层的判断 |
|
像我说的这样改,断点跟,你就知道到底到哪里变成null了,不要靠猜 |
|
先找到到底是什么东西null了,再考虑它为什么会是null,就好办的多了
否则完全是在瞎猜 |
|
不可能用这种笨办法,明明有值的
|
|
90分 |
.SelectSingleNode("Body/OrderResponse") 你的OrderResponse又不是第一层目录……它外面还有body呢 |
to starfd:
感谢,一针见血啊 to Z65443344: |
|
OrderResponse 这个属性在三级目录上
XmlDoc.DocumentElement.SelectSingleNode 这个是找二级node的 你要先找到body. 然后根据Body这个node再去找子级node |
|
那是人家有经验,所以不用那么麻烦,肉眼都能看出到底哪里有问题了 |