C#:修改xml节点 [英] C# : Modify a xml node
问题描述
我有一个xml文件:
< XML版本=1.0编码=UTF-8? >
<提醒和GT;
<&提醒GT;
<标题>&报警1 LT; /标题>
<说明与GT;及内容描述1 LT; /说明>
<时间> 03/07/2012 10:11 AM</Time>
<贪睡> 1 LT; /贪睡>
<&重复GT;无< /重复>
< /提醒>
< /提醒>
和我想修改从报警1的innerText属性为其他值,所以我写的代码,这实际上是重复。整个节点
XmlDocument的XML =新的XmlDocument();
与XML.load(0.xml);
XmlNodeList中元素= xml.SelectNodes(//提醒);
的foreach(以元素XmlNode的元素)
{
如果(element.InnerText ==报警1)
{
XmlNode的NEWVALUE = xml.CreateElement (改性);
element.ReplaceChild(NEWVALUE,元素);
xml.Save(0.xml);
}
}
和则尝试另一个代码:
的foreach(在xml.SelectNodes的XmlElement元素(//提醒))
{
如果(element.InnerText = =报警1)
{
XmlNode的NEWVALUE = xml.CreateElement(修改时间);
element.ReplaceChild(NEWVALUE,元素);
xml.Save(0.xml);
}
}
但还工作不`吨.... < [想出了一个新的代码]
XmlDocument的XML:/ p>
=新的XmlDocument();
与XML.load(0.xml);
的foreach(在xml.SelectNodes的XmlElement元素(//提醒))
{
的foreach(以元素的XmlElement中element1)
{
如果(element.SelectSingleNode(//标题)的InnerText ==报警1)。
{
XmlNode的NEWVALUE = xml.CreateElement(修改时间);
element.ReplaceChild(NEWVALUE,中element1);
xml.Save(0.xml);
}
}
}
但它所做的闹铃1变
<变形/>
编辑2:我解决它:D]
好这里是代码,我可以弄清楚:
XmlDocument的XML =新的XmlDocument();
与XML.load(0.xml);
的foreach(在xml.SelectNodes的XmlElement元素(//提醒))
{
的foreach(以元素的XmlElement中element1)
{
如果(element.SelectSingleNode(//标题)的InnerText ==报警1)。
{
MessageBox.Show(element1.InnerText);
XmlNode的NEWVALUE = xml.CreateElement(标题);
newvalue.InnerText =改装;
element.ReplaceChild(NEWVALUE,中element1);
xml.Save(0.xml);
}
}
}
我心底很感激你,帮助和感谢
试试这个:
xml.SelectSingleNode(//提醒/标题)的InnerText =的NewValue。
您的foreach
行简单地通过一个循环。所谓的提醒元素的列表,而不是它的子节点
看看这个XPath教程以获取更多信息:
http://www.w3schools.com/xpath/xpath_intro.asp
i have that xml file :
<?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>
And i want to modify the innertext from Alarm1 to another value so i wrote that code which actually duplicate the entire node .
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");
}
}
And then tried another code :
foreach (XmlElement element in xml.SelectNodes("//reminder"))
{
if (element.InnerText == "Alarm1")
{
XmlNode newvalue = xml.CreateElement("MODIFIED");
element.ReplaceChild(newvalue, element);
xml.Save("0.xml");
}
}
But also doesn`t work....
EDIT 1 : [Figured out a new code]
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");
}
}
}
But it made the Alarm1 becomes
<MODIFIED />
EDIT 2 : [I SOLVED IT :D] Okay here is the code i could figure out :
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");
}
}
}
I`ll really appreciate your helps and thanks.
Try this:
xml.SelectSingleNode("//reminder/Title").InnerText = "NewValue";
Your foreach
line is simply looping through a list of elements called "reminders", not it's child nodes.
Take a look at this xpath tutorial for more information:
http://www.w3schools.com/xpath/xpath_intro.asp
这篇关于C#:修改xml节点的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!