2017-11-09 10 views
0

C#winformsにUserという名前のモデルがあり、xmlファイルに追加するコードがあります。メインクラスで XMLでノードに追加できない

class User 
{ 
    public string Username { get; set; } 

    public void AddUserXml() 
    { 
     XmlDocument xml = new XmlDocument(); 

     xml.Load("user.xml"); 
     XmlNode x = xml.SelectSingleNode("/username"); 
     x.InnerText = Username; 
     xml.Save("user.xml"); 
    } 
} 

は私が

User user = new User(); 
user.Username = "test"; 
user.AddUserXml(); 

ようにそれを呼び出すようにしようとしています。しかし、これは、このエラー

に 'System.NullReferenceException' タイプの未処理の例外を与える発生しました。追加情報:オブジェクト参照がオブジェクトのインスタンスに設定されていません。

私のXMLは、それが「ユーザ名」である必要があり、あなたが渡しているノードの名前ではありません「/ユーザ名を」SELECTSINGLENODEするために、この

<?xml version="1.0" encoding="utf-8"?> 
    <user> 
     <username></username> 
     <course></course> 
    </user> 
+0

何行数にエラー発生していない「/ユーザ名」を「ユーザ名」を選択する必要がありますか? – Dave

+0

InnerText行の – Alen

+0

では、デバッガの使い方を学ぶ必要があります。これはデバッガでコードをステップ実行するだけで簡単に解決できました – Dave

答えて

1

あなたの呼び出しのように見えます。 "/ username"という名前でノードを見つけることができないため、ヌルを返してからヌルオブジェクトのプロパティにアクセスし、その例外が発生します。

0

xmlの一番上のタグは " 「ユーザ」タグではなく「ユーザ」タグである。このため、最初にユーザノードを選択してから、ユーザノードのユーザ名ノードを選択する必要があります。

さらに、あなたは

public void AddUserXml() 
{ 
    XmlDocument xml = new XmlDocument(); 
    xml.Load("user.xml");     
    var userNode = xml.SelectSingleNode("user"); 
    var userNameNode = userNode.SelectSingleNode("username"); 
    userNameNode.InnerText = Username; 
    xml.Save("user.xml"); 
} 
関連する問題