【问题标题】:Linq updating XML-documentLinq 更新 XML 文档
【发布时间】:2020-05-11 12:32:15
【问题描述】:

我只是在创建一个将设置存储在 xml 文件中的应用程序。 如果我现在要保存一个新参数,我需要检查该参数是否已经存在并更新它或将其添加到文档中。

其实我是这样解决的:

XDocument xDocument = XDocument.Load(appDataFolder + @"\settings.xml");
foreach(XElement xElement in xDocument.Descendants("Settings"))
{
    if(xElement.Element("projectFile") != null)
        xElement.Element("projectFile").Value = projectFile;
    else
        xElement.Add(new XElement("projectFolder", projectFile));

    if (xElement.Element("projectFolder") != null)
        xElement.Element("projectFolder").Value = projectFolder;
    else
        xElement.Add(new XElement("projectFolder", Environment.GetFolderPath(Environment.SpecialFolder.CommonDocuments)));

        }
    xDocument.Save(appDataFolder + @"\settings.xml");

这是实际的settings.xml:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!--System-Settings-->
<Settings version="1.0.0.0">
  <projectFile>C:\Users\Public\Documents\project.prj</projectFile>
  <projectFolder>C:\Users\Public\Documents</projectFolder>
</Settings>

如果元素不存在,是否有更方便的方式自动添加元素?

【问题讨论】:

  • 这不是您问题的答案,但也许您应该考虑使用XmlConfigurationProvider 来存储您的应用设置?使用起来比手动读取 XML 文件更方便。
  • 谢谢您的建议。当然这是一种可能的方式,但我也需要与该应用程序中的其他工作的 xml 文件进行交互,因此也为此,获得我的问题的答案很有用。

标签: c# xml linq


【解决方案1】:

System.Xml.Linq.XElement 实际上有一个方法可以做到这一点,即SetElementValue

它需要XName 和所需的内容,根据您的直觉添加或更新。

两者

var xml = XElement.Parse("<outer></outer>");
xml.SetElementValue("inner", 2);

var xml = XElement.Parse("<outer><inner>1</inner></outer>");
xml.SetElementValue("inner", 2);

结果

<outer><inner>2</inner></outer>

正如我们从 remarks section 中看到的那样,它的设计考虑了您的用例。

此方法旨在使维护列表变得容易 名称/值对作为一组子元素。维护时 列表,您需要添加对、修改对或删除对。如果你 调用此方法传递一个不存在的名称作为孩子 元素,此方法为您创建一个子元素。如果你打电话给这个 传递现有子元素名称的方法,此方法 将子元素的值修改为您指定的值。 如果你传递 null 作为值,这个方法会移除子元素。

【讨论】:

  • 哇真的很棒。谢谢!但是有一个问题,第二个例子xml.SetElementValue("y",2); 中的“y”是做什么的?
  • @Telefisch 这是我重命名测试代码时的遗留问题。固定。
猜你喜欢
  • 2010-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多