【问题标题】:How to edit an Xml file's element values如何编辑 XML 文件的元素值
【发布时间】:2014-03-19 21:50:19
【问题描述】:

我有这个 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>

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

【问题讨论】:

    标签: c# xml settings edit updating


    【解决方案1】:

    你可以像这样使用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

    【讨论】:

    • 谢谢!这完美地工作。我真的很感激帮助!但它不会让我投票给你的答案。
    • @jothous 欢迎您。如果它解决了您的问题,您可以接受这个作为答案。
    【解决方案2】:

    保留您当前的代码,只需修改几行:

    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);
    }
    

    【讨论】:

    • 这对我不起作用,它和我已经拥有的代码一样。不过,感谢您的帮助,@Selman22 的回答对我有用!
    猜你喜欢
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多