Xml.Linq:反转 XML 的子节点
Posted
技术标签:
【中文标题】Xml.Linq:反转 XML 的子节点【英文标题】:Xml.Linq: Reversing child-nodes of a XML 【发布时间】:2020-05-20 14:51:24 【问题描述】:我根据用户输入在运行时创建了以下 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 完全相反的方法。
【问题讨论】:
【参考方案1】:您可以使用Reverse
例子:
static void Main(string[] args)
XElement srcTree = new XElement("Parent",
new XElement("X1", 1),
new XElement("X2",
new XElement("Y1", new XElement("Rank", 4)),
new XElement("Y1", new XElement("Rank", 3)),
new XElement("Y1", new XElement("Rank", 2)),
new XElement("Y1", new XElement("Rank", 1)))
);
var reverseList = srcTree.Elements("X2").Descendants("Y1").InDocumentOrder().Reverse().ToList();
srcTree.Element("X2").Remove();
srcTree.Add(new XElement("X2", reverseList));
Console.WriteLine(srcTree);
Console.ReadLine();
它会给你想要的结果:
<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>
【讨论】:
以上是关于Xml.Linq:反转 XML 的子节点的主要内容,如果未能解决你的问题,请参考以下文章