我有一个看起来像这样的XmlDocument;
<Root>
<file id="1" amount="10" att="0" />
<file id="2" amount="20" att="0"/>
<file id="3" amount="40" att="0"/>
<file id="4" amount="30" att="0"/>
<file id="5" amount="10" att="0"/>
</Root>
排序后,它应该如下所示:
<Root>
<file id="3" amount="40" att="0"/>
<file id="4" amount="30" att="0"/>
<file id="2" amount="20" att="0"/>
<file id="1" amount="10" att="0"/>
<file id="5" amount="10" att="0"/>
</Root>
我生成了一个XmlDocument;
XmlDocument xDoc = new XmlDocument();
然后我生成一个XmlNodeList;
XmlNodeList xAmount = xDoc.SelectNodes("Root/file[@att='0']");
然后我做一个for循环并构建一个多维数组。
amtArray = new int[xAmount.Count, 2];
for (int i = 0; i < xAmount.Count; i++)
{
amtArray[i,0] = xAmount[i].Attribute["id"].Value;
amtArray[i,1] = xAmount[i].Attribute["amount"].Value;
}
我可以在可能的任何特定点尝试排序。
对整个XmlDocument,xDoc
进行排序或
对XmlNodeList,xAmount
进行排序或
对多维数组进行排序。
我问是否有办法对整个XmlDocument或XmlNodeList进行排序。
答案 0 :(得分:2)
我发现Linq2Xml更容易使用..
var xDoc = XDocument.Load(filename);
var newxDoc = new XElement("Root", xDoc.Root
.Elements()
.OrderByDescending(x => (int)x.Attribute("amount"))
.ThenBy(x=>(int)x.Attribute("id"))
);
string xml = newxDoc.ToString();
输出:
<Root>
<file id="3" amount="40" att="0" />
<file id="4" amount="30" att="0" />
<file id="2" amount="20" att="0" />
<file id="1" amount="10" att="0" />
<file id="5" amount="10" att="0" />
</Root>