C# 如何指定节点结果顺序?

C# 如何指定节点结果顺序?,c#,sorting,xpath,C#,Sorting,Xpath,我有以下XML,由第三方库生成: <PhoneNumbers> <PhoneNumber Key="1">123-456-7890</PhoneNumber> <PhoneNumber Key="2">234-567-8901</PhoneNumber> <PhoneNumber Key="3">345-678-9012</PhoneNumber> </PhoneNumbers>

我有以下XML,由第三方库生成:

<PhoneNumbers>
    <PhoneNumber Key="1">123-456-7890</PhoneNumber>
    <PhoneNumber Key="2">234-567-8901</PhoneNumber>
    <PhoneNumber Key="3">345-678-9012</PhoneNumber>
</PhoneNumbers>

123-456-7890
234-567-8901
345-678-9012
问题是我不应该依赖于
键的值
属性(a)按顺序出现,或(b)从1开始。后者更是如此,但我希望这个过程尽可能安全

我需要做的是获取电话号码列表,按
值(升序)排序。因此,通过使用
XmlNode.SelectNodes
我希望生成的
XmlNodeList
以正确的顺序包含
PhoneNumber
节点,而不一定是按它们出现的顺序

如何使用XPath实现这一点?
这可以直接做吗


如果有区别的话,我使用的是.NET 2.0。

XPathExpression类提供了一个AddSort方法:


Xpath本身没有为此定义任何内容

对于C#NET来说,这可能是您想要的:

使用XPath无法实现这一点。如果您使用的是
XPathDocument
,则可以使用
AddSort
方法


但是,如果您已经在使用XmlDocument(和/或需要能够更新xmldom),那么使用Key属性的值作为键值,很容易将SelectNodes的结果转储到
SortedDictionary

下面是一个示例,说明如何使用前面提到的AddSort方法使用XPathExpression完成此操作。XPathExpression可与.Net 2.0()一起使用


在这种情况下,在字符串列表中选择手机,然后对其进行排序不是更容易吗?
private static void XmlTest()
{
    XPathDocument results = new XPathDocument(@"c:\temp\temp.xml");
    XPathNavigator navigator = results.CreateNavigator();
    XPathExpression selectExpression = navigator.Compile("/PhoneNumbers/PhoneNumber");
    XPathExpression sortExpr = navigator.Compile("@Key");
    selectExpression.AddSort(sortExpr, XmlSortOrder.Ascending, XmlCaseOrder.None, "", XmlDataType.Text);
    XPathNodeIterator nodeIterator = navigator.Select(selectExpression);
    int i = 0;
    while (nodeIterator.MoveNext())
    {
        Console.WriteLine(nodeIterator.Current.Value);
        i++;
    }
}