c# - 使用 C# 添加键、值 XML 元素

标签 c# xml winforms linq

我在使用 C# 向 XML 文件添加元素时遇到问题。我的 diff 目录中有我的 App.config 文件。因此,我使用 LINQ 检索我想要的值并从 TextBox 设置值。

<appSettings>
    <add key="Something" value="false" />
    <add key="UserName" value="user0001" />
    <add key="Password" value="123456" />
    <add key="Environment" value="" />
    <add key="DBUserName" value="DBname23" />
    <add key="DBPassword" value="12345678" />
</appSettings>

以上是我的 XML 文件。我能够检索 UserNamePassword 的值并将其设置为加密的值。我的做法如下图所示:

var doc1 = XDocument.Load(appConfigFile1);

var list1 = from appNode in doc1.Descendants("appSettings").Elements()
            where appNode.Attribute("key").Value == "UserName"
            select appNode;
var list2 = from appNode in doc1.Descendants("appSettings").Elements()
            where appNode.Attribute("key").Value == "Password"
            select appNode;
var list3 = from appNode in doc1.Descendants("appSettings").Elements()
            where appNode.Attribute("key").Value == "DBUserName"
            select appNode;
var list4 = from appNode in doc1.Descendants("appSettings").Elements()
            where appNode.Attribute("key").Value == "DBPassword"
            select appNode;
var element1 = list1.FirstOrDefault();
var element2 = list2.FirstOrDefault();
var element3 = list3.FirstOrDefault();
var element4 = list4.FirstOrDefault();
element1.Attribute("value").SetValue(txtbox1);
element2.Attribute("value").SetValue(txtbox2);
element3.Attribute("value").SetValue(txtbox3);
element4.Attribute("value").SetValue(txtbox4);
doc1.Save(appConfigFile1);

要求是如果 XML 文件中的一个元素被删除,我应该能够创建具有键和值的相同元素。

示例:请将上面的 xml 与下面的进行比较:

<appSettings>
    <add key="HasUI" value="false" />
    <add key="Password" value="123456" />
    <add key="Environment" value="" />
    <add key="DBUserName" value="DBname23" />
    <add key="DBPassword" value="12345678" />
</appSettings>

缺少用户名元素。那么我怎样才能创建一个 XML 元素 <add key="UserName" value="" /> 并将其设置到 XML 文件中的同一位置?

我在 C# 中加载 XML 文件时遇到的错误是 NullReferenceException。

请帮帮我。

最佳答案

看在上帝的份上,任何你做不止一次的事情都应该是一个函数!

function UpdateOrCreateAppSetting(XMLDocument doc, string key, string value)
{
    var list = from appNode in doc.Descendants("appSettings").Elements()
            where appNode.Attribute("key").Value == key
            select appNode;
    var e = list.FirstOrDefault();

    // If the element doesn't exist, create it
    if (e == null) {
        e = doc.CreateElement("add")
        e.Attributes.Append("key", key);
        e.Attributes.Append("value", value);
        doc.Descendants("appSettings").AppendChild(e);

    // If the element exists, just change its value
    } else {
        e.Attribute("value").SetValue(value);
    }
}

现在调用该函数四次就可以了。 ;)

关于c# - 使用 C# 添加键、值 XML 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11639412/

相关文章:

c# - 事件 ‘System.Windows.Controls.MediaElement.MediaOpened’只能出现在+ =或-=的左侧

c# - Linq to SQL 可空整数?

c# - 回滚时 Entity Framework InvalidOperationException

全宽的 Android XML 图像

xml - 从文档中提取唯一的 HTML 标签

c# - 为什么 WinForm Form.FormClosed 事件不从窗体持有者触发?

c# - 简单的建议在哪里保存设置

c# - 并发访问时出现 Azure CloudAppendBlob 错误

c# - 在调用 ToUpper() 等之后,旧字符串对象是否会被垃圾回收?

Java Applet SecurityException 禁止的包名称 : java