C#:修改xml节点

我有那个xml文件:

   Alarm1 Desc1 03/07/2012 10:11AM 1 None   

我想将Alarm1中的innertext修改为另一个值,因此我编写了实际复制整个节点的代码。

  XmlDocument xml = new XmlDocument(); xml.Load("0.xml"); XmlNodeList elements = xml.SelectNodes("//reminders"); foreach (XmlNode element in elements) { if (element.InnerText == "Alarm1") { XmlNode newvalue = xml.CreateElement("MODIFIED"); element.ReplaceChild(newvalue, element); xml.Save("0.xml"); } } 

然后尝试了另一个代码:

  foreach (XmlElement element in xml.SelectNodes("//reminder")) { if (element.InnerText == "Alarm1") { XmlNode newvalue = xml.CreateElement("MODIFIED"); element.ReplaceChild(newvalue, element); xml.Save("0.xml"); } } 

但也不起作用….

编辑1:[找出新代码]

  XmlDocument xml = new XmlDocument(); xml.Load("0.xml"); foreach (XmlElement element in xml.SelectNodes("//reminder")) { foreach (XmlElement element1 in element) { if (element.SelectSingleNode("//Title").InnerText == "Alarm1") { XmlNode newvalue = xml.CreateElement("MODIFIED"); element.ReplaceChild(newvalue, element1); xml.Save("0.xml"); } } } 

但它使Alarm1成为了

  

编辑2:[我解决了它:D]好的,这里是我能想出的代码:

  XmlDocument xml = new XmlDocument(); xml.Load("0.xml"); foreach (XmlElement element in xml.SelectNodes("//reminder")) { foreach (XmlElement element1 in element) { if (element.SelectSingleNode("//Title").InnerText == "Alarm1") { MessageBox.Show(element1.InnerText); XmlNode newvalue = xml.CreateElement("Title"); newvalue.InnerText = "MODIFIED"; element.ReplaceChild(newvalue, element1); xml.Save("0.xml"); } } } 

我非常感谢你的帮助和感谢。

试试这个:

 xml.SelectSingleNode("//reminder/Title").InnerText = "NewValue"; 

你的foreach行只是循环遍历一个名为“提醒”的元素列表,而不是它的子节点。

有关更多信息,请查看此xpath教程:

http://www.w3schools.com/xpath/xpath_intro.asp

如果你想使用linq和xml(我发现它是最好的方法),那么你将需要使用System.Xml.Linq命名空间。 该命名空间中的类都以X而不是Xml为前缀。 此命名空间中的function更新,更好,更容易使用Linq进行操作。

 var xml = XDocument.Load("0.xml"); var alarm1 = xml.Descendants("reminder") .Single(r => r.Element("Title") == "Alarm1"); 

此代码将为您提供变量alarm1 ,该变量是标题节点为“Alarm1”的提醒。

从那时起,我不清楚你想要修改什么。 如果你只想更改标题,那么……

 alarm1.Element("Title").Value = "MODIFIED"; xml.Save("0.xml"); 
 XDocument doc = XDocument.Load("0.xml"); IEnumerable rech = from el in doc.Root.Elements("reminder") where (string)el.Element("Title") == "Alarm1" select el; if (rech.Count() != 0) { foreach (XElement el in rech) { el.Element("Title").SetValue("NEW TITLE"); } } doc.Save("0.xml"); 
 XDocument xDoc = XDocument.Load(.....); xDoc.Descendants("Title").First().Value = "New Value"; xDoc.Save(...)