NullReferenceでなXMLベースの業務
-
19-09-2019 - |
質問
もしかしたら、 NullReferenceException
時を読むよう属性のxmlファイルには何属性が読みよう要素が定義されたユーザー入力します。
の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[]
はsplitted配列、ユーザの入力します。例えば、ユーザー入力 test1_read
はsplittedる _Arguments[0] = "test"
や _Arguments[1] = "read"
解決
いきなりの 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);
}
}
また私はあなたが見て使用 LinqToXml 構文解析時にXml文書です。います。
他のヒント
あなたが解析しているXMLファイルが存在しない場合には、私は多分XPath式では、あなたは、単に//group
の代わりにgroup
を指定する必要がありますよね。
所属していません StackOverflow