在转发器中对xml记录进行排序和限制

时间:2010-08-27 13:59:50

标签: asp.net xml rss

我正在阅读rss feed,我将它绑定到转发器。我想选择最近的3篇帖子。在我的XPathExpression我使用AddSort数据排序很好,但是当我绑定到转发器时,排序就会丢失。

这是我的第一个问题。我使用xpath表达式[position()<=3]来限制为3个项目。然而,这发生在排序之前。因此,我不会得到最近的3条记录,而是从Feed中的前三条记录,然后进行排序(如果我使用转发器正确排序)。这是一段代码片段。任何帮助将不胜感激。

            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 :(得分:0)

我不认为我的解决方案是理想的,但现在是:

我创建了一个新的DataTable,并为XML中的每个SingleNode添加了一列。我像以前一样填充XPathNodeIterator,然后循环遍历它以创建DataTable的每个新行。然后我对DefaultView的{​​{1}}进行了排序。然后我做了另一个循环 - 这个是现在填充的DataTable。我在循环中使用了一个计数器。如果计数器大于我想要的记录数,我使用了DefaultView。最后,我返回Rows.RemoveAt并将其绑定到转发器。

我不喜欢它。感觉我在这里做太多额外的工作。但是......它给出了理想的结果。