c#排序XElement,带注释
本文关键字:注释 XElement 排序 | 更新日期: 2023-09-27 17:49:47
我有一个表示以下xml的XElement:
<Node>
<Child id="1" /><!-- Comment 1 -->
<Child id="3" /><!-- Comment 3 -->
<Child id="2" /><!-- Comment 2 -->
</Node>
我如何对Node的子元素排序,使XElement.ToString()方法返回以下内容?子元素后面的注释和文本必须移动。
<Node>
<Child id="1" /><!-- Comment 1 -->
<Child id="2" /><!-- Comment 2 -->
<Child id="3" /><!-- Comment 3 -->
</Node>
假设每个元素后面都有相应的注释,请尝试以下操作:
var xDoc = XDocument.Parse(/* your xml */);
var reordered = xDoc.Root
.Elements("Child")
.Select(el => new {
Element = el,
Comments = el.NodesAfterSelf()
.TakeWhile(n => n.NodeType == XmlNodeType.Comment)
})
.OrderBy(pair => (int)pair.Element.Attribute("id"))
.SelectMany(pair => new [] { pair.Element }.Concat(pair.Comments));
xDoc.Root.ReplaceAll(reordered);
EDIT:允许任意数量的注释(包括0);空格已处理