我正在try 向一个XML文件添加一些条目:

   foreach(var talkNumber in listNumbers)
   {
       var newElem = new XElement("PublicTalk",
                               new XAttribute("Number", talkNumber),
                               new XAttribute("Excluded", false),
                               new XAttribute("ExcludedFromDate", "1900-01-01"),
                               new XAttribute("Note", ""),
                               new XAttribute("TimesHeard", 0),
                               new XAttribute("LastHeard", "1900-01-01")
                              );
       ptLangInfo.Add(newElem);
   }

XML

<?xml version="1.0" encoding="utf-8"?>
<PublicTalkTitles>
  <!-- English -->
  <eng>
    <PublicTalk Number="21" Excluded="false" ExcludedFromDate="1900-01-01" Note="" TimesHeard="1" LastHeard="2023-10-15" />
    <PublicTalk Number="1" Excluded="false" ExcludedFromDate="1900-01-01" Note="" TimesHeard="0" LastHeard="1900-01-01" />
    <PublicTalk Number="2" Excluded="false" ExcludedFromDate="1900-01-01" Note="" TimesHeard="0" LastHeard="1900-01-01" />
    <PublicTalk Number="3" Excluded="false" ExcludedFromDate="1900-01-01" Note="" TimesHeard="0" LastHeard="1900-01-01" />
  </eng>
</PublicTalkTitles>

如您所见,问题是我想以正确的数字顺序将这些新项添加到现有项中.它们被添加到底部.

在我的代码片段中,ptLangInfoeng元素.

推荐答案

方法XContainer.Elements()返回IEnumerable<XElement>而不是IList<XElement>.因此,没有内置log(n)可以使用二进制搜索并假定元素已经排序来将元素插入到子元素的枚举中.

因此,我建议在事后对它们进行分类:

// Order the elements by the Number attribute
var ordered = ptLangInfo.Elements("PublicTalk")
    .OrderBy(e => (int?)e.Attribute("Number"))
    .ToList();
// Remove the elements from ptLangInfo using System.Xml.Linq.Extensions.Remove()
ordered.Remove(); 
// Add them back in the new order
ptLangInfo.Add(ordered);

演示小提琴here.

Csharp相关问答推荐

获取Windows和Linux上的下载文件夹

将列表字符串映射为逗号分隔字符串<>

. NET Core DB vs JSON模型设计

MongoDB.NET-将数据绑定到模型类,但无法读取整数值

如何在不考虑年份的情况下判断日期时间是否在某个日期范围内?

ASP.NET核心REST API返回一个非常大的数字

集合表达式没有目标类型

未在数据流块之间传播完成

在.NET 7.0 API控制器项目中通过继承和显式调用基类使用依赖项注入

使用Entity Framework6在对象中填充列表会导致列表大多为空

如何将端点(或с匹配请求并判断其路径)添加到BCL?

EF核心新验证属性`DeniedValues`和`StringCompison`不起作用

无法将生产环境的AppDbContext设置替换为用于集成测试的内存数据库

用MongoDB c#驱动程序删除和返回嵌套数组中的文档

映射器-如何映射到多个实体

无效的Zip文件-Zip存档

如何使用LINQ在C#中填充列表列表?

如何为控制器PUT操作绑定对象数组

如何查找Span;T&>是否包含相同顺序的其他Span<;T&>

SendInput无法在C#中正确模拟键盘