【问题标题】:Get a specific number of results from an XmlDocument XPath query从 XmlDocument XPath 查询中获取特定数量的结果
【发布时间】:2010-12-22 02:12:29
【问题描述】:

我正在查询 Twitter RSS 提要并将结果提供给中继器进行显示。我只想获得 XPath 查询的前 5 个结果。有没有办法在 XPath 语法中做到这一点,还是我必须遍历生成的 XmlNodeList 才能取出前 5 个?

XmlDocument doc = new XmlDocument();
XmlTextReader reader = new XmlTextReader(rssPath);
doc.Load(reader);

XmlNodeList items = doc.SelectNodes("/rss/channel/item");

rptTwitter.ItemDataBound += new RepeaterItemEventHandler(rptTwitter_ItemDataBound);
rptTwitter.DataSource = items;
rptTwitter.DataBind();

【问题讨论】:

    标签: asp.net xpath xmldocument


    【解决方案1】:

    试试这个 XPath 查询:

    (/rss/channel/item)[position() <= 5]
    

    它只返回前五个匹配项。括号很重要,因为没有它们,[position() &lt;= 5] 部分适用于 item 元素在其父元素中的位置,而不是它在结果节点集中的位置。

    【讨论】:

    • 这正是我目前情况下所需要的。谢谢!
    【解决方案2】:

    如果您想继续使用 xpath,那么您应该查看 xpath 中的 position() 方法。使用这样的谓词...

    [position() < 6]
    

    ... 应将结果限制为仅前 5 个项目。 Welbog 的答案是您最好的参考(+1 到 Welbog)。

    但是,如果您能够使用 .NET 3.5,那么我建议您在此处查看我的答案...

    What is the coolest thing you can do in <10 lines of simple code? Help me inspire beginners!

    ...并查看使处理 RSS 提要更容易的联合 API。然后,如果您只想要 5 个项目,请使用 LINQ 方法 Take on the collection 来获取特定数量的项目。

    这将让您更好地表达自己,而不必担心提要的结构、命名空间等。

    我意识到这并不是直接回答您的问题,但由于很多人不了解 .NET 中的这些新 API,我想我会在这里提及它们。

    所以,您只获取 5 个项目的代码将是这样的......

    var xmlr = XmlReader.Create("http://twitter.com/statuses/public_timeline.rss")
    var first5Items = SyndicationFeed
                        .Load(xmlr)
                        .GetRss20Formatter()
                        .Feed
                        .Items
                        .Take(5);  
    

    【讨论】:

    • 马丁,谢谢!这是一个很好的选择,我想我会更频繁地使用它。我不确定我的客户端服务器是否是 3.5,所以我现在远离 LINQ,但如果我发现他们有它,我会使用它。我只是在本地尝试过,它就像一个魅力。我喜欢 RSS 节点的实际属性。
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 2014-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多