如何编辑Xml文件的元素值

时间:2014-03-19 21:50:20

标签: c# xml settings edit updating

我有这个Xml文件,我想编辑homepagesearch_provider等任何元素。

<?xml version="1.0" encoding="utf-8"?>
    <Preferences>
      <personal>
        <homepage>http://duckduckgo.com</homepage>
        <search_provider>DuckDuckGo</search_provider>
        <search_provider_url>http://duckduckgo.com/?q=</search_provider_url>
      </personal>
    </Preferences>

以下是我用来尝试更改主页元素的C#代码。我们说我运行saveSetting("homepage", "http://google.com");

            public static void saveSetting(String settingName, String newvalue)
            {
               XmlDocument xml = new XmlDocument();

               xml.Load(userSettingsFile);

               foreach (XmlElement element in xml.SelectNodes("Preferences"))
               {
                   foreach (XmlElement oldsettingname in element)
                   {
                       element.SelectSingleNode(settingName);

                       XmlNode settingtosave = xml.CreateElement(settingName);

                       settingtosave.InnerText = newvalue;

                       element.ReplaceChild(settingtosave, oldsettingname);

                       xml.Save(userSettingsFile);
                   }
               }
            }

现在,虽然这在一定程度上起作用并确实更改了指定值,但它也会删除整个personal元素。

<?xml version="1.0" encoding="utf-8"?>
<Preferences>
  <homepage>http://google.com</homepage>
</Preferences>

希望有人可以帮助我!我一直在寻找解决方案的最后两天,这是我最接近让代码按照我需要的方式工作的方法。

2 个答案:

答案 0 :(得分:2)

您可以像这样使用LINQ to XML

public static void saveSetting(String settingName, String newvalue)
{
    var xmlDocument = XDocument.Load("path");

    var element = xmlDocument.Descendants(settingName).FirstOrDefault();

    if (element != null) element.Value = newvalue;

    xmlDocument.Save("path");
}

有关详细信息,请参阅此文档:Modifying Elements, Attributes, and Nodes in an XML Tree

答案 1 :(得分:0)

保留当前代码并修改几行:

public static void saveSetting(String settingName, String newvalue)
{
   XmlDocument xml = new XmlDocument();

   xml.Load(userSettingsFile);

   foreach (XmlElement element in xml.SelectNodes("Preferences"))
   {
     if(element.Name.Equals(settingName))
     {
        element.InnerText = newvalue;
        break;
     }
   }

   xml.Save(userSettingsFile);
}