我正在寻找有关以下问题的指导。我试图遍历父节点id_Entries的所有节点,如下所示:
<id_Entries>
<id_14222>"2020-01-21"</id_14222>
<id_1451222>"2020-06-21"</id_1451222>
<id_141222>"2018-06-21"</id_141222>
<id_151222>"2019-06-21"</id_151222>
<id_145122>"2021-06-21"</id_145122>
<id_145222>"2020-04-21"</id_145222>
<id_451222>"2020-01-21"</id_451222>
<id_14512>"2020-02-21"</id_14512>
</id_Entries>
在循环中,我有几行代码捕获日期,并且有一个条件,即如果当前日期长于某个特定值,那么我将删除该子节点。
我遇到的问题是节点没有被删除。
这是我目前拥有的:
XDocument doc = XDocument.Load(filePath);
foreach (var child in doc.Element("id_Entries").Elements())
{
string entry = (string)child;
entry = entry.Substring(1, entry.Length - 2);
string[] splitDate = entry.Split('-');
DateTime entryDate = new DateTime(Int32.Parse(splitDate[0]), Int32.Parse(splitDate[1]), Int32.Parse(splitDate[2]));
int days = (currentDate - entryDate).Days;
if (days >= maxDays)
child.Remove();
}
StringBuilder builder = new StringBuilder();
using (TextWriter writer = new StringWriter(builder))
{
doc.Save(writer);
}
通过研究,我了解到您无法在迭代期间删除节点。我不确定目前还有什么其他解决方案。
谢谢你的家伙。
答案 0 :(得分:0)
我找到了解决方案。遍历列表时,请在末尾添加.ToList()。根据我的理解,我相信这将删除节点,因为我们当前不循环遍历实际元素,因此能够删除列表中的当前节点。
注意:此解决方案很简单,这就是我实现它的原因。有更好的解决方案可以产生更好的运行时间。