在asp.net中的标签中读取和存储xml的值

时间:2015-11-08 18:07:02

标签: c# asp.net xml-parsing

我从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中没有收到,那么它运行正常

1 个答案:

答案 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;
}