c#排序元素,带注释
我有一个表示以下xml的XElement:c#排序元素,带注释,c#,xml,sorting,linq-to-xml,C#,Xml,Sorting,Linq To Xml,我有一个表示以下xml的XElement: <Node> <Child id="1" /><!-- Comment 1 --> <Child id="3" /><!-- Comment 3 --> <Child id="2" /><!-- Comment 2 --> </Node> 如何对节点的子节点进行排序,以便XElement.ToString()方法返回以下内容? 必须移动子对象后面
<Node>
<Child id="1" /><!-- Comment 1 -->
<Child id="3" /><!-- Comment 3 -->
<Child id="2" /><!-- Comment 2 -->
</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);
编辑:编辑以允许每个元素有任意数量的注释(包括0);空白已被处理。元素和注释之间可能存在空白。也可能有多条注释。@TWT-更新了我的答案以允许多条(或0条)注释,即使在以前的版本中,空格也不是问题。我想在这里添加的一条重要注释是,第一个节点之前的所有注释都将被删除。@TWT-这是绝对正确的;但是,您在问题描述中没有提到这些。此外,似乎没有任何默认的排序方法,如果你能进一步阐述你最初的问题,我会尽力提供帮助。