Xml.Linq:反转XML的子节点

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

我根据用户输入在运行时中创建了以下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完全相反的任何方法。

c# .net xml linq linq-to-xml
1个回答
0
投票
您可以使用以下代码实现它

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()调用也会清理排序的序列。
© www.soinside.com 2019 - 2024. All rights reserved.