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教程:
如果你想使用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(...)