c#检查XmlNode值属性

本文关键字:属性 XmlNode 检查 | 更新日期: 2023-09-27 18:02:51

我编写这段代码是为了检查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);
    }
}

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

c#检查XmlNode值属性

您应该像这样检查空值:

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

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

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

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

当前,它返回null,并且您正在为Value属性解引用它-因此出现例外。请注意,您还假设有一个id属性,这可能不是一个好主意。

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