簡體   English   中英

我如何在C#中更新XML文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM