1

我写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);

}

我没有任何错误,但我的新值没有保存在文件中。

如何xml node在 C# 中更新

4

3 回答 3

1

我试过你的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 文件。

于 2013-05-30T18:30:25.217 回答
0

像这样试试

 XmlDocument xmlDom = new XmlDocument();
 xmlDom.Load("YourXMLFILEPATH.xml");
 XmlNode newXMLNode = xmlDom.SelectSingleNode("/Settings/AsteriskHost");
 newXMLNode.InnerText = YourValue;
 xmlDom.Save("YourXMLFILEPATH.xml");
 Console.WriteLine(xmlDom);

你试过这个吗?

于 2013-05-23T07:04:29.463 回答
0

您可以像这样修改您的设置方法。

    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");
    }
于 2013-05-23T07:05:33.953 回答