如果XML元素不存在,则添加XML元素
问题描述:
我正在向我的分幅添加一个新的复选框,并且需要将其值保存到设置文件中。 我想用下面的代码来做到这一点:如果XML元素不存在,则添加XML元素
private void CloseDisconnectedCbx_CheckedChanged(object sender, EventArgs e)
{
XDocument doc = XDocument.Load(BotsFile);
var savedBots = doc.Descendants("SavedBots")
.Where(p => p.Element("BotName").Value.ToLower()
== SelectBotBox.SelectedItem.ToString().ToLower())
.Elements("CloseDisconnected").FirstOrDefault();
if (savedBots == null)
{
try
{
doc.Descendants("SavedBots")
.Where(p => p.Element("BotName").Value.ToLower()
== SelectBotBox.SelectedItem.ToString().ToLower())
.FirstOrDefault()
.Add(new XElement("CloseDisconnected",
Convert.ToInt32(CloseDisconnectedCbx.Checked)));
doc.Save(BotsFile);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
它确实增加了新的元素,但是,它看起来像这样:
<CloseDisconnected/> VALUE
它永远不会结束元素的结束。 我的代码错了吗,还是我忘记了一些东西?
只有在XML文件中找不到元素时,才会触发此代码。 如果是,更改将由另一个按钮处理。
答
Check parenthesis in your code
XElement xElem = new XElement("root");
xElem.Add(new XElement("CloseDisconnected", "123")); // generates what you expect
xElem.Add(new XElement("CloseDisconnected"), "123"); // generates what you see
显示,增加了closedisconnected请 – HatSoft 2012-07-30 14:00:48
真的很难读那些oneliners的代码,我认为将有助于可读性低,如果它被分成几个线(如提取搜索值分离变量,要添加的元素,等等。 )。 – Giedrius 2012-07-30 14:02:30
@HatSoft用于添加CloseDisconnected的代码位于Try子句内。 – Rickard 2012-07-30 14:06:35