![](/img/trans.png)
[英]How can I update an element of an existing XML file in c# Windows 8 App?
[英]How can i update xml file in c#
我编写console application
程序,这是我的xml file
:
<?xml version="1.0" encoding="utf-8" ?>
<Settings>
<AsteriskHost type="string">172.16.18.14</AsteriskHost>
</Settings>
我运行这段代码
public void Set(List<AcmSettings> acmSettings)
{
XElement xelement = XElement.Load("Settings.xml");
IEnumerable<XElement> settings = xelement.Elements();
foreach (var item in acmSettings)
{
settings.FirstOrDefault(x => x.Name == item.Name).SetValue("treeee");
}
xelement.Save("Settings.xml");
}
这是我的测试:
[Test]
public void SetShouldUpdateValue()
{
var settingsManager = new SettingsManager();
const string newIp = "165.166.167.167";
const string elemntName = "AsteriskHost";
var acmSetting = new List<AcmSettings> { new AcmSettings { Name = elemntName, Value = newIp } };
settingsManager.Set(acmSetting);
var setting = settingsManager.Get(x => x.Name == elemntName).FirstOrDefault();
Assert.IsTrue(setting != null);
Assert.IsTrue(setting.Value== newIp);
}
我没有任何错误,但是我的新值未保存在文件中。
如何在C#中更新xml node
我尝试了您的Set
方法,它对我来说运行正常。 我确实只需要更改一行就可以调整当前的实现:
// settings.FirstOrDefault(x => x.Name == item.Name).SetValue("treeee");
settings.FirstOrDefault(x => x.Name == item.Name).SetValue(item.Value);
也许问题出在您的Get
方法上。 这里是一个快速(不生产质量) Get
落实。 使用此实现,您的单元测试将成功运行。
// note - just a string (name) passed in
public XElement Get(string name)
{
XElement xelement = XElement.Load("Settings.xml");
IEnumerable<XElement> settings = xelement.Elements();
return settings.FirstOrDefault(x => x.Name == name);
}
如以上注释中所建议,另一种可能性是您正在查看项目XML文件,而不是在查看输出XML文件。
这样尝试
XmlDocument xmlDom = new XmlDocument();
xmlDom.Load("YourXMLFILEPATH.xml");
XmlNode newXMLNode = xmlDom.SelectSingleNode("/Settings/AsteriskHost");
newXMLNode.InnerText = YourValue;
xmlDom.Save("YourXMLFILEPATH.xml");
Console.WriteLine(xmlDom);
你尝试过这个吗?
您可以像这样修改您的设置方法。
public void Set(List<AcmSettings> acmSettings)
{
XElement xelement = XElement.Load("Settings.xml");
IEnumerable<XElement> settings = xelement.Elements();
foreach (var item in acmSettings)
{
xelement.Descendants(item.Name).FirstOrDefault().Value = item.Value;
}
xelement.Save("Settings.xml");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.