我从url读取xml时遇到问题,并希望它以这样的标签存储
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load("http://test.pragyaware.com/b2bwebservice.aspx?txnmessage=" + final);
lblname.Text = xmldoc.SelectSingleNode("/TXN/Name").FirstChild.Value;
lblacno.Text = xmldoc.SelectSingleNode("/TXN/AccountNo").FirstChild.Value;
lblkno.Text = xmldoc.SelectSingleNode("/TXN/KNumber").FirstChild.Value;
lbladdress.Text = xmldoc.SelectSingleNode("/TXN/Address").FirstChild.Value;
lblbillno.Text = xmldoc.SelectSingleNode("/TXN/BillNo").FirstChild.Value;
lblbilldt.Text = xmldoc.SelectSingleNode("/TXN/BillDate").FirstChild.Value;
lblduedt.Text = xmldoc.SelectSingleNode("/TXN/CashChequeDueDate").FirstChild.Value;
lblnetamt.Text = xmldoc.SelectSingleNode("/TXN/NetAmount").FirstChild.Value;
lblsurchrg.Text = xmldoc.SelectSingleNode("/TXN/Surcharge").FirstChild.Value;
lblgamt.Text = xmldoc.SelectSingleNode("/TXN/GrossAmount").FirstChild.Value;
如果我在所有字段中都收到值,那么一切正常,但如果我没有从xml中的url收到任何一个值,那么它的显示
System.NullReferenceException:未将对象引用设置为对象的实例。
请帮我摆脱这个。 如果我评论那些标签在xml中没有收到,那么它运行正常
答案 0 :(得分:0)
lblkno.Text = xmldoc.SelectSingleNode("/TXN/KNumber").FirstChild.Value;
与您代码中的所有类似语句一样,此语句会产生风险假设。它假定/ TXN / KNumber节点存在,并假定它有一个子节点(FirstChild)
你自己说,有可能你没有收到一些节点。因此,你不应该做出这些假设。相反,有一个像下面这样的方法,并更改您的语句以调用该方法。在这种情况下,未收到xml节点的标签将为空。
lblname.Text = GetXmlNodeFirstChildValue(xmldoc, "/TXN/Name", string.Empty);
方法:
private static string GetXmlNodeFirstChildValue(XmlDocument xmlDocument, string xPathQuery, string defaultValue)
{
XmlNode xPathQueryResult = xmlDocument.SelectSingleNode(xPathQuery);
if (xPathQueryResult != null)
{
XmlNode firstChild = xPathQueryResult.FirstChild;
if (firstChild != null)
{
return firstChild.Value;
}
}
return defaultValue;
}