我是System.Xml.XmlDocument类型的XML文档,如下所示:
<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>
我在网上尝试了各种代码,但没有一个代码适合我。我还将我的XmlDocument转换为XDocument以使用LINQ,如下所示:
var xDoc = XDocument.Parse(xdoc.OuterXml);
但仍然没有成功。
我需要在组元素XmlDocument
中对子进行排序答案 0 :(得分:1)
试试这个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);
答案 1 :(得分:1)
一种选择是删除元素并在排序后再次添加。
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>