C#检查XmlNode值属性

时间:2015-07-14 15:31:59

标签: c# xml

我编写了这段代码来检查XmlNode是否有值,但是当我运行它时总是在!= null上崩溃。 这很奇怪,因为这个解决方案众所周知。

private static void TraverseNodes(XmlNodeList nodes)
{
    foreach (XmlNode node in nodes)
    {

        if (!node.HasChildNodes)
        {
            Console.WriteLine(node.Name + " " + node.Attributes["id"].Value);
        }
        if (node.Attributes["SplitCombinationOperator"].Value != null)
        {
            Console.WriteLine(node.Name + " " + node.Attributes["SplitCombinationOperator"].Value);
        }
        else
        {
            Console.WriteLine(node.Name);
        }

        TraverseNodes(node.ChildNodes);
    }
}

错误如下: 对象引用未设置为对象的实例。

2 个答案:

答案 0 :(得分:1)

你应该检查这样的空值:

node.Attributes["SplitCombinationOperator"] != null &&
node.Attributes["SplitCombinationOperator"].Value != null

否则,当NullReferenceException在尝试访问其node.Attributes["SplitCombinationOperator"]属性时为空时,您将获得Value

答案 1 :(得分:1)

您只需要检查属性索引器本身是否返回null:

if (node.Attributes["SplitCombinationOperator"] != null)

目前,这将返回null,并且您将其取消引用Value属性 - 因此异常。请注意,您还假设有一个id属性,这可能不是一个好主意。

(你不需要检查Value本身是否为空 - 如果属性存在,则该值为非空。即使它是空的,你也会得到一个空字符串而不是空引用。)