2013-05-06 77 views
-6

我想做出更新XML節點的數據,我有例如類別ID = 1以下XML節點更新XML節點數據,如何

<categories> 
    <category> 
    <id>1</id> 
    <name>Computer</name> 
    <description>Information tech.</description> 
    <active>False</active> 
    </category> 
    <category> 
    <id>2</id> 
    <name>Cate1</name> 
    <description>MMukh</description> 
    <active>True</active> 
    </category> 
</categories> 

,他們的數據提取到文本框。如何保存對此節點的更改。

非常感謝。

+4

難道你不喜歡你以前的問題中的任何答案http://stackoverflow.com/questions/16398193/how-can-i-get-single-node-data-using-linq/16398475#16398475?你有嘗試過嗎?在更新xml節點時遇到什麼問題? – I4V 2013-05-06 12:32:05

+0

你試圖顯示和保存的代碼在哪裏? – Sujit 2013-05-06 12:44:39

回答

-1

試試我的解決方案,

string xml = @"<categories> 
       <category> 
       <id>1</id> 
       <name>Computer</name> 
       <description>Information tech.</description> 
       <active>False</active> 
       </category> 
       <category> 
       <id>2</id> 
       <name>Cate1</name> 
       <description>MMukh</description> 
       <active>True</active> 
       </category> 
      </categories>"; 

XDocument xDoc = XDocument.Parse(xml); 
int id = 1; 

var items = xDoc.XPathSelectElement("//category[id=" + id + "]") 
      .Elements() 
      .ToDictionary(e => e.Name.LocalName, e => (string)e); 

if (items != null) 
{ 
    // display these fields to the text box 
    Console.WriteLine(items["name"]); 
    Console.WriteLine(items["description"]); 
    Console.WriteLine(items["active"]); 
} 

你可以使用上面的代碼在文本框中顯示的數據。和下面的代碼更新現有的XML與更新的數據。

// updated value for xml element - description 
string description = "Computer 123"; 

var items1 = from item in xDoc.Descendants("category") 
       where item.Element("id").Value == id.ToString() 
       select item; 

foreach (XElement itemElement in items1) 
{ 
    itemElement.SetElementValue("name", description); 
} 
xDoc.Save("data.xml"); 

您可以在xDoc中獲得更新的xml數據。