Сортировка с XPath - не XSL - PullRequest
4 голосов
/ 13 декабря 2011

Есть ли способ в XPath DOM Programming с использованием System.Xml для запуска selectNodes (XPATH) с параметром сортировки?

Например, следующий XML и программа записывают значения в том же порядке, что и документ (по убыванию). Есть ли способ использовать XPath для получения значений в порядке возрастания?

Примечание. Конечно, вы можете выполнить предварительную сортировку в XSL, однако мне нужно обновить значения, пока я их циклически перебираю. Поскольку XSL дает мне отсортированную копию элементов, , а не сами элементы , я не могу использовать XSL.

Вот какой-то XML, вывод программы

public static void Main() {

        XmlDocument xml = new XmlDocument();
        xml.Load( "t.xml" );

        // SelectNodes gets in document order, but I want in 
            // ascending order based on @value
        foreach( XmlNode ndNode in xml.SelectNodes( "/xml/ele" ) ) {
            Console.WriteLine( ndNode.Attributes["value"].Value );
        }
    }

Вот XML

<xml>
<ele value='3' test='Third'/>
<ele value='2' test='Second'/>
<ele value='1' test='First'/>
</xml>

Наконец вывод в документе (в порядке убывания). Мне нужен XPath, который возвращает узлы в порядке возрастания.

3
2
1

PS, я использую System.Xml в Visual Studio 2008 .NET 3.5

Ответы [ 2 ]

5 голосов
/ 13 декабря 2011

XPath не поддерживает порядок, однако вы можете посмотреть на <a href="https://msdn.microsoft.com/en-us/library/0xcbzwb2.aspx" rel="nofollow noreferrer">AddSort</a> метод.

3 голосов
/ 13 декабря 2011

Нет, только в XPath невозможно выполнить сортировку.

Но вы можете легко использовать LINQ для сортировки вашей коллекции узлов по любым значениям.

XmlDocument xml = new XmlDocument ();
xml.LoadXml("<xml> <ele value='3' test='Third'/> <ele value='2' test='Second'/> <ele value='1' test='First'/> </xml>");
var nodes = xml.SelectNodes( "/xml/ele" ).Cast<XmlNode>().OrderBy(ndNode => ndNode.Attributes["value"].Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...