我有那个xml文件:
<?xml version="1.0" encoding="utf-8"?>
<reminders>
<reminder>
<Title>Alarm1</Title>
<Description>Desc1</Description>
<Time>03/07/2012 10:11AM</Time>
<snooze>1</snooze>
<repeat>None</repeat>
</reminder>
</reminders>
我想将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变为
<MODIFIED />
编辑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");
}
}
}
我非常感谢你的帮助和感谢。
答案 0 :(得分:15)
试试这个:
xml.SelectSingleNode("//reminder/Title").InnerText = "NewValue";
您的foreach
行只是循环遍历一个名为“提醒”的元素列表,而不是它的子节点。
请查看此xpath教程以获取更多信息:
答案 1 :(得分:3)
如果你想使用linq和xml(我发现它是最好的方法),那么你将需要使用System.Xml.Linq
命名空间。该命名空间中的类都以X
而非Xml
为前缀。使用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");
答案 2 :(得分:2)
XDocument doc = XDocument.Load("0.xml");
IEnumerable<XElement> 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");
答案 3 :(得分:2)
XDocument xDoc = XDocument.Load(.....);
xDoc.Descendants("Title").First().Value = "New Value";
xDoc.Save(...)
答案 4 :(得分:0)
XmlDocument xml = new XmlDocument();
xml.Load(...);
var newTitle = "MODIFIED";
var title_node = xml.GetElementsByTagName("Title");
if(!string.IsNullOrEmpty(newTitle) && title_node.Count > 0)
{
title_node[0].InnerText = newTitle;
}