C#:修改xml节点 [英] C# : Modify a xml node

查看:230
本文介绍了C#:修改xml节点的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆