In questo esempio riesco a farmi restituire un xml con il nodo "COMPANY/EMPLOYEE" ordinato per attributo "user".
<COMPANY>
<EMPLOYEE user="1" d1="1" d2="" d3="3"/>
<EMPLOYEE user="2" d1="3" d2="" d3="4"/>
<EMPLOYEE user="3" d1="2" d2="" d3="14"/>
</COMPANY>
...
XmlNodeReader newReader = Utility.SortXml(oXmlDocument, "COMPANY",
"COMPANY/NAME", "@user");
...
public static XmlNodeReader SortXml(XmlDocument oXmlSort, string rootXml,
string nodeSort, string attrSort)
{
try
{
XmlDocument myXmlNew = new XmlDocument();
MemoryStream memStream = new MemoryStream();
oXmlSort.Save(memStream);
memStream.Position = 0;
XmlDocument doc = new XmlDocument();
doc.Load(memStream);
XPathNavigator nav = doc.CreateNavigator();
XPathExpression exp = nav.Compile(nodeSort);
XPathExpression sortExpr = nav.Compile(attrSort);
exp.AddSort(sortExpr, new IntegerComparer());
XmlElement rootNode = myXmlNew.CreateElement(rootXml);
myXmlNew.AppendChild(rootNode);
XPathNodeIterator links = nav.Select(exp);
while (links.MoveNext())
{
XmlNode xmlNode = ((System.Xml.IHasXmlNode)links.Current).GetNode();
rootNode.AppendChild(myXmlNew.ImportNode(xmlNode, true));
}
XmlNodeReader noderReader = new XmlNodeReader(myXmlNew);
return noderReader;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}