Сортировка и ограничение записей XML в повторителе - PullRequest
0 голосов
/ 27 августа 2010

Я читаю RSS-канал и привязываю его к репитеру. Я хотел бы выбрать 3 самых последних сообщения. в моем XPathExpression я использую AddSort Данные сортируются очень хорошо, но когда я связываюсь с ретранслятором, сортировка теряется.

Это моя первая проблема. Я использую выражение xpath [position()<=3] для ограничения до 3 элементов. Это, однако, происходит до сортировки. Таким образом, я получу не 3 самые последние записи, а первые три из ленты, которые затем сортируются (если я правильно выполню сортировку с повторителем). Вот фрагмент кода. Любая помощь будет оценена.

            Dim xpn As XPathNavigator = New XPathDocument(RssURL).CreateNavigator
        _xmlnsm = XmlHelper.GetXmlNameSpaceManager(xpn)
        Dim expr As XPathExpression
        expr = xpn.Compile(String.Format("/rss/channel/item[position()<={0}]", numRecords))
        expr.AddSort("title", XmlSortOrder.Descending, XmlCaseOrder.None, "", XmlDataType.Text)

        Dim iterator As XPathNodeIterator = xpn.Select(expr.Expression, _xmlnsm)
        rptNews.DataSource = iterator
        rptNews.DataBind()

1 Ответ

0 голосов
/ 30 августа 2010

Я не думаю, что мое решение идеально, но вот оно:

Я создал новый DataTable и добавил столбец для каждого SingleNode в XML.Я заполнил XPathNodeIterator, как я делал раньше, а затем перебрал его, чтобы создать каждую новую строку DataTable.Затем я применил сортировку к DefaultView из DataTable.Тогда я сделал ДРУГОЙ цикл - этот был теперь заселен DefaultView.Я использовал счетчик в цикле.Если счетчик был больше, чем желаемое количество записей, я использовал Rows.RemoveAt.Наконец я вернул DataTable и привязал его к ретранслятору.

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

...