2016-11-13 51 views
0

我想在c#中更新文件中的xml值。更新Xml和C#

下面是XML文件:

<user_Name> 
Florian 
<account> 
<account_Name/> 
<number_lines/> 
<line> 
<line_Id/> 
<line_Date/> 
<line_Desc/> 
<line_Value/> 
</line> 
</account> 
</user_Name> 

我與LINQ試過,我在該行有一個NullReferenceException我試圖改變價值

代碼:

public void Create_New_Account(string _path_File) 
     { 
      Console.WriteLine(_path_File); 
      string account_Name = "test"; 

      XDocument xmlFile = XDocument.Load(_path_File); 

      var query = from c in xmlFile.Elements("user_Name").Elements("account") 
         select c; 
      Console.WriteLine(query); 

      foreach (XElement account in query) 
      { 
       account.Attribute("account_Name").Value = account_Name; 
      } 
     } 

我也試用XmlDocument:

XmlDocument xmlDoc = new XmlDocument(); 

xmlDoc.Load(xmlFile); 

XmlNode node = xmlDoc.SelectSingleNode("user_Name/account/account_Name"); 
node.Attributes[0].Value = "test"; 

xmlDoc.Save(xmlFile); 

此處同樣的錯誤。 我首先想到我沒有通過正確的道路,但它是正確的。 我試圖使用文件中的其他元素,仍然無法正常工作。

有人可以給我一個小費,我做錯了什麼嗎?

+0

使用調試器來檢查什麼是空的。 – SLaks

+0

從c中選擇c'沒有意義。 – SLaks

+0

我從那裏拿過它:http://stackoverflow.com/questions/367730/how-to-change-xml-attribute 使用調試器時,錯誤發生時,一切都有一個值。但var賬戶具有所有xml文件作爲值 – Andromelus

回答

0

你可以做這樣的:

foreach (XElement account in query) 
    account.Element("account_Name").Add(new XAttribute("account_Name", account_Name)); 

更加小心,你可以寫一些代碼,所以如果屬性帳戶名不存在,創建它,否則,你將它添加到節點:

var accountNameAttribute = "account_Name"; 
foreach (XElement account in query) 
{ 
    var accountName = account.Element(accountNameAttribute); 
    if (accountName.Attribute(accountNameAttribute) == null) 
     accountName.Add(new XAttribute(accountNameAttribute, account_Name)); 
    else 
     accountName.Attribute(accountNameAttribute).Value = account_Name; 
} 

希望這會有所幫助!

+0

正如Cramiriel所說,我其實不是在尋找屬性,而是爲了元素。但是我會保留它在任何地方,可能是有用的;) – Andromelus