尝试使用 XML to LINQ 以正确的排序顺序将新元素添加到 XML 中

问题描述 投票:0回答:1

我正在尝试向 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>

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

在我的代码片段中,

ptLangInfo
eng
元素。

c# linq-to-xml
1个回答
0
投票

方法

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

因此我建议事后对它们进行排序:

var ordered = ptLangInfo.Elements("PublicTalk").OrderBy(e => (int?)e.Attribute("Number")).ToList();
ordered.Remove();
ptLangInfo.Add(ordered);

演示小提琴在这里

© www.soinside.com 2019 - 2024. All rights reserved.