I am trying to add some entries to a XML file:
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>
The problem as you can see is that I want to add these new items in the correct numerical order to the existing ones. They get added to the bottom.
In my code snippet ptLangInfo is the eng element.
The method
XContainer.Elements()returns anIEnumerable<XElement>not anIList<XElement>. As such there's no builtinlog(n)way to insert an element into the enumeration of child elements using a binary search and assuming it's already sorted.Thus I'd recommend just sorting them afterwards:
Demo fiddle here.