Кажется, я не могу понять, как это сделать.Здесь есть несколько других примеров, но ничего не соответствует тому, что я хочу сделать:
Рассмотрим следующий объект XMLDocument:
<Policy>
<Covers>
<MyCover1>
<properties>
<sortOrder>1</sortOrder>
</properties>
</MyCover1>
<MyCover3>
<properties>
<sortOrder>3</sortOrder>
</properties>
</MyCover3>
<MyCover2>
<properties>
<sortOrder>2</sortOrder>
</properties>
</MyCover2>
</Covers>
</Policy>
Как мне поступить при сортировке этого документа на основеузел "sortOrder", использующий linQ или другой метод?
После сортировки externalxml должен выглядеть примерно так:
<Policy>
<Covers>
<MyCover1/>
<MyCover2/>
<MyCover3/>
</Covers>
</Policy>
UPDATE
Iдостигнут определенный прогресс, теперь данные отсортированы, но как мне обновить исходный несортированный XmlDocument?Это то, что у меня есть:
private static void DoSort(XmlDocument policyDocument)
{
foreach(XmlNode coverGroup in policyDocument.SelectNodes("//CoverGroup"))
{
XDocument test = XDocument.Parse(coverGroup.OuterXml);
var sorted = from xe in test.Element("CoverGroup").Elements()
let so = xe.Element("properties").Element("displayOrder")
let num = (int)so
orderby num
select xe;
var result = new XElement("CoverGroup", sorted);
}
}
Мне нужно применить изменения обратно к «policyDocument».Примечание. Обложка может иметь собственную группу CoverGroup, которая затем может снова иметь обложки с собственными группами CoverGroup.Это понижает по крайней мере 4 уровня: то есть
<Policy>
<Covers>
<MyCover1>
<properties>
<sortOrder></sortOrder>
</properties>
<CoverGroup>
<MyCover1Child>
<properties>
<sortOrder></sortOrder>
</properties>
</MyCover1Child>
</CoverGroup>
</MyCover1>
...
</Covers>
XPATH и foreach выше cathers для вышеупомянутой структуры, поэтому я думал о, возможно, просто замене coverGroup XmlNode в первом foreachс новым отсортированным списком, но я не знаю, как восстановить новый XmlNode.Если мы можем понять это, то мы можем просто сделать это:
policyDocument.ReplaceChild(coverGroup, mySortedXmlNode)