質問

もしかしたら、 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を指定する必要がありますよね。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top