我有这个Xml文件,我想编辑homepage
或search_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>
希望有人可以帮助我!我一直在寻找解决方案的最后两天,这是我最接近让代码按照我需要的方式工作的方法。
答案 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);
}