我在使用 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 文件。我能够检索 UserName
和 Password
的值并将其设置为加密的值。我的做法如下图所示:
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/