有没有办法可以根据属性值对xmlnodes进行排序,考虑我不能使用linq 。因为我使用的是.NET 2.0。
示例:
<Root a="1">
<I aa="1" b="2">
<I aa=5" b="2">
<I aa="3" b="2">
<I aa="4" b="2">
</Root>
应该像 - &gt;
<Root a="1">
<I aa="1" b="2">
<I aa=3" b="2">
<I aa="4" b="2">
<I aa="5" b="2">
</Root>
请帮忙。
答案 0 :(得分:7)
要对以下内容进行排序:
var xml= xDoc.Element("Root")
.Elements("I")
.OrderByDescending(s => (int) s.Attribute("aa"));
然后保存它:
XDocument doc = new XDocument(new XElement("Root", xml));
doc.Save("C:\\Something.xml");
<强>更新强>
您可以使用XSLT:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/*">
<xsl:copy>
<xsl:for-each select="I">
<xsl:sort select="@aa" order="ascending"/>
<xsl:copy-of select="."/>
</xsl:for-each>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
并调用它(引用How to apply an XSLT Stylesheet in C#):
XPathDocument myXPathDoc = new XPathDocument(myXmlFile) ;
XslTransform myXslTrans = new XslTransform() ;
myXslTrans.Load(myStyleSheet);
XmlTextWriter myWriter = new XmlTextWriter("result.xml",null) ;
myXslTrans.Transform(myXPathDoc,null,myWriter) ;