我在尝试读取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"
答案 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
。