我根据用户输入在运行时中创建了以下XML文件。
<Parent>
<X1>1</X1>
<X2>
<Y1>
<Rank>4</Rank>
</Y1>
<Y1>
<Rank>3</Rank>
</Y1>
<Y1>
<Rank>2</Rank>
</Y1>
<Y1>
<Rank>1</Rank>
</Y1>
</X2>
</Parent>
现在,我想以升序排列<Rank>
的方式反转子节点。我想要以下输出
<Parent>
<X1>1</X1>
<X2>
<Y1>
<Rank>1</Rank>
</Y1>
<Y1>
<Rank>2</Rank>
</Y1>
<Y1>
<Rank>3</Rank>
</Y1>
<Y1>
<Rank>4</Rank>
</Y1>
</X2>
</Parent>
之所以会出现此问题,是因为我正在使用AddFirst方法。我没有找到与AddFirst完全相反的任何方法。
var doc = XDocument.Parse(xml);
var element = doc.Descendants("X2").FirstOrDefault();
var sorted = element?.Elements().OrderBy(e => e.Elements().FirstOrDefault()?.Value).ToList();
element?.RemoveAll();
element?.Add(sorted);
获取X2
,按子元素值对元素排序,然后删除现有元素并添加排序后的元素。您应该评估排序后的项目到列表中,否则RemoveAll()
调用也会清理排序的序列。