XPathExpression AddSort - PullRequest
       20

XPathExpression AddSort

1 голос
/ 18 октября 2011

Можно ли отсортировать элементы, а не только узлы, используя XPathExpression.AddSort?

Если я немного изменю код примера в документации MSDN на XPathExpression.AddSort запросить элемент, а не весь узел, порядок сортировки не работает.

var doc = new XPathDocument("contosoBooks.xml");
var nav = doc.CreateNavigator();

var expr = nav.Compile("/bookstore/book/title");

expr.AddSort("title", XmlSortOrder.Descending,
               XmlCaseOrder.None, "", XmlDataType.Number);

var iterator = nav.Select(expr);
while (iterator.MoveNext())
{
    Console.WriteLine(iterator.Current);
}

Я ожидал бы такой вывод:

The Gorgias
The Confidence Man
The Autobiography of Benjamin Franklin

Но вывод такой:

The Autobiography of Benjamin Franklin
The Confidence Man
The Gorgias

Вот XML-файл для справки

<?xml version="1.0" encoding="utf-8" ?>
<bookstore>
  <book genre="autobiography" publicationdate="1981-03-22" ISBN="1-861003-11-0">
    <title>The Autobiography of Benjamin Franklin</title>
    <author>
      <first-name>Benjamin</first-name>
      <last-name>Franklin</last-name>
    </author>
    <price>8.99</price>
  </book>
  <book genre="novel" publicationdate="1967-11-17" ISBN="0-201-63361-2">
    <title>The Confidence Man</title>
    <author>
      <first-name>Herman</first-name>
      <last-name>Melville</last-name>
    </author>
    <price>11.99</price>
  </book>
  <book genre="philosophy" publicationdate="1991-02-15" ISBN="1-861001-57-6">
    <title>The Gorgias</title>
    <author>
      <name>Plato</name>
    </author>
    <price>9.99</price>
  </book>
</bookstore>

1 Ответ

3 голосов
/ 18 ноября 2011

Это похоже на дубликат вопроса - см. XPathExpression Сбой AddSort

Так что в вашем случае код должен выглядеть так:

var expr = nav.Compile("/bookstore/book");

expr.AddSort("title", XmlSortOrder.Descending,
           XmlCaseOrder.None, "", XmlDataType.Number);

или

var expr = nav.Compile("/bookstore/book/title");

expr.AddSort(".", XmlSortOrder.Descending,
           XmlCaseOrder.None, "", XmlDataType.Number);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...