2015-11-09 72 views
0

XML文件,我有:如何更新C#中的XML文件?

<NameList> 
    <personDetail> 
    <first_name>Rock</first_name> 
    <last_name>Shajahan</last_name> 
    <age>24</age> 
    </personDetail> 
</NameList> 

在主:

   XDocument doc = XDocument.Load(@"nameList.xml"); 

     var node = doc.Descendants("personDetail").FirstOrDefault(personDetail => personDetail.Element("first_name").Value == this.textBox1.Text); 


     node.SetElementValue("first_name", this.textBox1.Text); 
     node.SetElementValue("last_name", this.textBox2.Text); 
     node.SetElementValue("age", this.textBox3.Text); 

     Console.WriteLine(node); 
     doc.Save(@"nameList.xml"); 

我沒有紅色的id變量,當我通過node.SetElementValue( 「時代」 更新,this.textBox3.Text);來改變其他變量(例如姓氏)有一切正常。但是,如果我想改變「first_name」的「根」,它會顯示「發生了類型'System.NullReferenceException'的未處理的異常」。

+1

您可以發佈,實際上拋出異常的代碼? 「我沒有紅色的id變量」是什麼意思?至於你的NullReferenceException,請參考這裏:http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it – vesan

+0

問題是姓氏和年齡是成功的。但是當我想改變first_name時發生警告。 – HCOOLH

回答

0

//試試這個代碼

 string path = "path"; 
     var element = "first_name"; 
     var value = "Dev"; 

     try 
     { 
      string fileLoc = path; 
      XmlDocument doc = new XmlDocument(); 
      doc.Load(fileLoc); 
      XmlNode node = doc.SelectSingleNode("/NameList/personDetail/" + element); 
      if (node != null) 
      { 
       node.InnerText = value; 
      } 
      else 
      { 
       XmlNode root = doc.DocumentElement; 
       XmlElement elem; 
       elem = doc.CreateElement(element); 
       elem.InnerText = value; 
       root.AppendChild(elem); 
      } 
      doc.Save(fileLoc); 
      doc = null; 
     } 
     catch (Exception) 
     { 

     } 
+0

是的,它有效,但仍然有一個問題,如(JOE C,30)(Rock,B,30),想改變JOE到Steven。如果年齡相同,它可能會顯示(Steven C,30)(Steven B,30)......或者僅將該方法用於根? – HCOOLH

+0

用於查詢嘗試XmlNode node = doc.SelectSingleNode(「/ NameList/personDetail/first_name [text()='JOE']」);和價值=史蒂文 – devnath