更新xml节点数据,如何

时间:2013-05-06 12:29:31

标签: c# xml linq

我想更新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>

例如,类别id = 1,并将其数据提取到文本框。如何保存对此节点的更改。

非常感谢。

1 个答案:

答案 0 :(得分:-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数据。