【发布时间】:2016-08-02 18:52:59
【问题描述】:
我正在尝试将新的 <Period></Period> 元素添加(插入)到以下 XML 中;
<?xml version="1.0" encoding="utf-8"?>
<Scheduler>
<Module guid="64A3EB4C-7F34-47F3-8894-933CB0048D87">
<RetrieveDays>1</RetrieveDays>
<Schedule>
<Period>1</Period>
<Period>33</Period>
<Period>49</Period>
<Period>73</Period>
</Schedule>
</Module>
</Scheduler>
例如,我传递的值是 96,新的 XML 应该是这样的;
<?xml version="1.0" encoding="utf-8"?>
<Scheduler>
<Module guid="64A3EB4C-7F34-47F3-8894-933CB0048D87">
<RetrieveDays>1</RetrieveDays>
<Schedule>
<Period>1</Period>
<Period>33</Period>
<Period>49</Period>
<Period>73</Period>
<Period>96</Period>
</Schedule>
</Module>
</Scheduler>
使用以下代码;
// period is the new value
XDocument xmlDoc = new XDocument();
xmlDoc = XDocument.Load(String.Format(@"{0}\{1}", settingsDir, settingsFilename));
XElement periodNodes = xmlDoc.Root.Descendants("Module").Where(i => (String)i.Attribute("guid") == moduleGuId).First().Element("Schedule");
if (periodNodes.Descendants("Period").Where(x => x.Value == period.ToString()).Count() == 0)
periodNodes.Add(new XElement("Period", period.ToString()));
xmlDoc.Save(String.Format(@"{0}\{1}", settingsDir, settingsFilename));
但不幸的是,没有创建新的<Period></Period> 元素。我检查了 XML 是否有效,确实如此。我尝试重命名元素,但没有改变。
我找不到解决方案,我错过了什么?
更新
嗯,这很尴尬:我重新启动了计算机和 VS,现在它可以工作了 - 去看看。尽管如此,还是感谢大家这么快的回复和建议。
【问题讨论】:
-
你有没有检查过
periodNodes.Add确实被调用了? -
在询问我们之前,您可以use the debugger 单步执行您的代码并检查您的
if语句中的子句是否实际评估为真,如果不是,为什么不呢 -
检查this fiddle - 你的代码工作正常。如果您仍有问题,请提供minimal reproducible example。
-
@Charles Mager:我确实做到了,它确实进入了 periodNodes.Add 行。该文件也被保存(检查日期时间戳),但仍然缺少该行。
标签: c# xml linq linq-to-xml xelement