我最初问了这个问题(我们可以以可排序的方式自动将子元素添加到XElement中吗?(,它被关闭为重复(如何在XML文档中的特定位置添加XElement(。
这是我目前拥有的代码:
bool bInserted = false;
foreach (var weekDB in xdoc.Root.Elements())
{
DateTime datWeekDB = DateTime.ParseExact(weekDB.Name.LocalName, "WyyyyMMdd", CultureInfo.InvariantCulture);
if (datWeekDB != null && datWeekDB.Date > historyWeek.Week.Date)
{
// Insert here
weekDB.AddBeforeSelf(xmlHistoryWeek);
bInserted = true;
break;
}
}
if (!bInserted)
xdoc.Root.Add(xmlHistoryWeek);
它运行良好。但我想知道我是否可以使用LINQ来实现同样的事情?联系起来的答案表明:
搜索要添加的元素并使用add方法,如下所示
xDoc.Element("content") .Elements("item") .Where(item => item.Attribute("id").Value == "2").FirstOrDefault() .AddAfterSelf(new XElement("item", "C", new XAttribute("id", "3")));
但我不明白如何根据我的代码逻辑得出这样的逻辑。
我认为最好的方法是:您将使用LINQ来查找特定的元素。然后,您将根据您的发现插入到文档中。
这样的东西:
var targetElement = xdoc.Root.Elements()
.Where(weekDB => {
DateTime datWeekDB = DateTime.ParseExact(weekDB.Name.LocalName, "WyyyyMMdd", CultureInfo.InvariantCulture);
return datWeekDB != null && datWeekDB.Date > historyWeek.Week.Date;
})
.FirstOrDefault();
if (targetElement == null)
{
xdoc.Root.Add(xmlHistoryWeek);
}
else
{
targetElement.AddBeforeSelf(xmlHistoryWeek);
}