如何编写这个xpath查询?

时间:2011-02-14 12:31:11

标签: xml xpath rss

我正在使用来自多个网站的rss,而我的真正问题在于他们的Pubdate字段,因为他们的大多数PubDate值无论如何我都设法在xpath的帮助下从PubDate字段集中检索值。这就是我写的:

//item/title | 
//item/description | 
//item/link | 
//item/pubDate | 
//item/category

我希望将我的结果限制为我在xpath中知道的10条最新消息,我们有一个名为postion()的函数,我必须像下面这样使用它:

[postion() <= 10]

但是当我将这两个xpath查询混合在一起时,我将无法获得正确的结果:

 //item/title | 
 //item/description | 
 //item/link | 
 //item/pubDate | 
 //item/category [position() <= 10]

如何以正确的格式编写此特定xpath查询。 是否有任何关于xpath的快速书?

regads。

3 个答案:

答案 0 :(得分:4)

我认为最新消息是最重要的。

使用

(//item)[not(position() > 10)]/*
           [self::title or self::description 
           or self::link or self::pubDate or self::category
           ]

<强>解释

此表达式选择所有titledescriptionlinkpubDatecategory元素作为前10个{{1}之一的子元素XML文档中的元素。

通过以下方式尝试选择第一个(或任何位置元素,例如item)是常见问题解答和经常犯的错误:

item

这将选择文档中作为其父级的第一个子级的所有//item[1] 元素 - 并且可能有许多此类item元素。

仅选择文档中第一个item元素的XPath表达式是:

item

要记住的规则(//item)[1] 运算符的优先级更高(绑定更强),而不是[]缩写。

答案 1 :(得分:2)

  

我想将结果限制为最新的10个   一条新闻

/descendant::item[
   10 > last()-position()
]/*[
   self::title|self::description|self::link|self::pubDate|self::category  
]

答案 2 :(得分:0)

你应该试试

//item[position() <= 10]/pubDate

因为你想要第10个项目!