我正在阅读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()
答案 0 :(得分:0)
我不认为我的解决方案是理想的,但现在是:
我创建了一个新的DataTable
,并为XML中的每个SingleNode添加了一列。我像以前一样填充XPathNodeIterator
,然后循环遍历它以创建DataTable
的每个新行。然后我对DefaultView
的{{1}}进行了排序。然后我做了另一个循环 - 这个是现在填充的DataTable
。我在循环中使用了一个计数器。如果计数器大于我想要的记录数,我使用了DefaultView
。最后,我返回Rows.RemoveAt
并将其绑定到转发器。
我不喜欢它。感觉我在这里做太多额外的工作。但是......它给出了理想的结果。