如何使用XPath指定节点结果顺序?

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

 123-456-7890 234-567-8901 345-678-9012  

问题是我不应该依赖Key属性(a)按顺序出现的值,或者(b)从1开始。更多是后者,但我希望这个处理尽可能安全。

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

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

如果它有所作为,我使用的是.NET 2.0。

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

对于C#.NET,这可能是您正在寻找的: http : //social.msdn.microsoft.com/forums/en-US/xmlandnetfx/thread/ba975e0e-e0c7-4868-9acc-11d589cafc70/

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

但是,如果您已经在使用XmlDocument(和/或需要能够更新XML DOM),则可能只需使用Key属性的值作为Key值将SelectNodes的结果转储到SortedDictionary

以下是使用已提到的AddSort方法使用XPathExpression进行操作的示例。 XPathExpression可与.Net 2.0一起使用( http://msdn.microsoft.com/en-us/library/system.xml.xpath.xpathexpression.aspx

 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++; } }