Я борюсь с этой сортировкой и нуждаюсь в небольшой помощи.Сортировка с LINQ
Я буду сортировать дочерние узлы вдоль ранга и сохранить его. , например. для упорядочивания вспомогательных узлов внутри основного элемента я передам идентификатор для конкретного раздела.
Этот пример работает только для первых потомков, и теперь я застрял.
XElement x = XElement.Load(xmlString1);
x.Descendants("opt").First().ReplaceNodes(x.Descendants("opt").First()
.Descendants("sel").OrderBy(o => int.Parse(o.Attribute("rank").Value)));
4x.Save(xmlString2);
Мне это нужно.
x.Descendants("sub").Where(b => b.Attribute("id").Value == "DFG")
.ReplaceNodes(x.Descendants("opt").First()
.Descendants("sel").OrderBy(o => int.Parse(o.Attribute("rank").Value))
Оригинал
<main id="AFB" rank="1" name="ROOT">
<sub id="DFG" rank="2" name="SUB1">
<att >
<sel id="JIK" rank="4" name="444" />
<sel id="OKI" rank="2" name="222" />
</att>
<opt>
<sel id="JIK" rank="2" name="122" />
<sel id="OKI" rank="1" name="111" />
</opt>
</sub>
<sub id="EGG" rank="1" name="SUB2" >
<opt>
<sel id="DJI" rank="1" name="111" />
<sel id="LOW" rank="3" name="333" />
<sel id="QWE" rank="2" name="222" />
</opt>
</sub>
<main>
Target
<main id="AFB" rank="1" name="ROOT">
<sub id="EGG" rank="1" name="SUB2" >
<opt>
<sel id="DJI" rank="1" name="111" />
<sel id="QWE" rank="2" name="222" />
<sel id="LOW" rank="3" name="333" />
</opt>
</sub>
<sub id="DFG" rank="2" name="SUB1">
<att >
<sel id="OKI" rank="2" name="222" />
<sel id="JIK" rank="4" name="444" />
</att>
<opt>
<sel id="OKI" rank="1" name="111" />
<sel id="JIK" rank="2" name="122" />
</opt>
</sub>
<main>
Я редактировал свой пост, чтобы правильно форматировать код и сделать его доступным для чтения. Но '4x.Save (xmlString2);' был там раньше, и я не изменяю * код * при редактировании. Это опечатка? –
Вы попробовали рекурсию? – slawekwin