使用C#按属性排序XmlDocument

时间:2015-04-13 00:13:22

标签: c# sorting xmldocument

我有一个看起来像这样的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进行排序。

1 个答案:

答案 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>