【问题标题】:Sorting and limiting xml records in a repeater对转发器中的 xml 记录进行排序和限制
【发布时间】:2010-08-27 13:59:49
【问题描述】:

我正在阅读 RSS 提要,并将其绑定到转发器。我想选择最近的 3 个帖子。在我的XPathExpression 我使用AddSort 数据排序很好,但是当我绑定到转发器时,排序丢失了。

这是我的第一个问题。我正在使用 xpath 表达式 [position()<=3] 限制为 3 个项目。然而,这发生在排序之前。所以,我不会得到最近的 3 条记录,而是来自提要的前 3 条记录,然后对它们进行排序(如果我的排序与中继器一起正常工作)。这是一个代码sn-p。任何帮助将不胜感激。

            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()

【问题讨论】:

    标签: asp.net xml rss


    【解决方案1】:

    我不认为我的解决方案是理想的,但这里是:

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

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

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 1970-01-01
      • 2019-08-04
      • 2016-07-09
      • 1970-01-01
      • 2017-02-02
      • 1970-01-01
      • 1970-01-01
      • 2022-11-01
      相关资源
      最近更新 更多