如何在 C# 中对 XmlDocument 中的元素的子元素进行排序?

How to sort children of an element in XmlDocument in C#?

我有一个 XML 类型 System.Xml.XmlDocument 的文档如下:

<root>

  <group>
    <dog order="1" />
    <cat order="4" />
    <cat order="3" />
    <dog order="7" />
    <dog order="5" />
    <cat order="6" />
    <dog order="2" />
  </group>

  <other/>

</root>

我希望它像

<root>

  <group>
    <dog order="1" />
    <dog order="2" />
    <cat order="3" />
    <cat order="4" />
    <dog order="5" />
    <cat order="6" />
    <dog order="7" />
  </group>

  <other/>

</root>

我在网上尝试了各种代码,但 none 对我有用。我还将我的 XmlDocument 转换为 XDocument 以使用 LINQ,如下所示:

var xDoc = XDocument.Parse(xdoc.OuterXml);

还是没有成功。

我需要对组元素 XmlDocument 中的子项进行排序

试试这个 XSLT:-

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:template match="/*">
        <xsl:copy>
            <xsl:for-each select="dog">
                            <xsl:sort select="@aa" order="ascending"/>
                    <xsl:copy-of select="."/>
            </xsl:for-each>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

然后应用它::

XPathDocument myDocXPath = new XPathDocument(myXml);
XslTransform myXslTrans = new XslTransform();
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.xml",null);
myXslTrans.Transform(myDocXPath, null, myWriter);

一种选择是删除元素并在排序后重新添加它们。

XDocument doc  = XDocument.Load(filename);
var elements = doc.Root.Element("group").Elements().ToList();  // Copy the elements.

doc.Root.Element("group").RemoveAll();                         // Remove the elements from the document.
doc.Root.Element("group").Add(elements.OrderBy(x=>int.Parse(x.Attribute("order").Value)));
//Add them again after sorting.

勾选这个Demo

输出

 <root>
  <group>
    <dog order="1" />
    <dog order="2" />
    <cat order="3" />
    <cat order="4" />
    <dog order="5" />
    <cat order="6" />
    <dog order="7" />
  </group>
</root>