XML操作的NullReference

时间:2009-11-13 08:51:29

标签: c# xml nullreferenceexception

我在尝试读取xml文件的属性时得到NullReferenceException - 要从用户输入定义的元素读取什么属性。

StackTrace会将我重定向到此行(已标记)

XmlDocument _XmlDoc = new XmlDocument();
_XmlDoc.Load(_WorkingDir + "Session.xml");
XmlElement _XmlRoot = _XmlDoc.DocumentElement;
XmlNode _Node = _XmlRoot.SelectSingleNode(@"group[@name='" + _Arguments[0] + "']");
XmlAttribute _Attribute = _Node.Attributes[_Arguments[1]]; // NullReferenceException

我在哪里错过了这一点?这里缺少什么参考?我无法弄明白......

编辑:元素存在,属性(包括值)

也存在
<?xml version="1.0" encoding="utf-8"?>
<session>
 <group name="test1" read="127936" write="98386" />
 <group name="test2" read="352" write="-52" />
 <group name="test3" read="73" write="24" />
 <group name="test4" read="264524" write="646243" />
</session>

进一步说明:_Arguments[]是用户输入的分割数组。用户例如输入test1_read - 分为_Arguments[0] = "test"_Arguments[1] = "read"

2 个答案:

答案 0 :(得分:1)

使用XmlElement.GetAttribute方法会不会更好?这意味着您可以在尝试访问之前使用XmlElement.HasAttribute进行检查。这肯定会避免NullReference。

样品

XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(_WorkingDir + "Session.xml");
XmlElement xmlRoot = xmlDoc.DocumentElement;
foreach(XmlElement e in xmlRoot.GetElementsByTagName("group"))
{
    // this ensures you are safe to try retrieve the attribute
    if (e.HasAttribute("name")
    { 
        // write out the value of the attribute
        Console.WriteLine(e.GetAttribute("name"));

        // or if you need the specific attribute object
        // you can do it this way
        XmlAttribute attr = e.Attributes["name"];       
        Console.WriteLine(attr.Value);    
    }
}

另外,我建议您在.NET中解析Xml文档时使用LinqToXml

答案 1 :(得分:0)

如果没有要解析的XML文件,我猜可能在XPath表达式中,您需要指定//group而不是简单地group