2011-02-14 85 views
3

我从几个网站cosume rss和我真正的问题是与他们的Pubdate字段,因为他们的PubDate值大多数是无效的某种方式我设法从PubDate字段集借助xpath检索值。这是我写的东西:如何编写这个xpath查询?

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

,我想限制)我的结果,以10个最新的一条新闻,我知道XPath中我们称之为现在的位置是一个函数(我不得不使用它像以下:

[postion() <= 10] 

但是当我这两个XPath查询混合到了一起,我不会得到正确的结果:

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

我怎么能写正确的格式,这种特殊的XPath查询。 并且有没有xpath的快速通道书?

regads。

+2

“>是否有任何快车道书”。你似乎很匆忙 - 你甚至没有花时间用句号和大写字母来写句子,或者正确拼写“位置”。放松一下,停下来思考:研究你正在使用的技术,获得一些专业知识和经验,并且从长远来看,它会为你节省大量时间。 – 2011-02-14 13:12:03

+1

好问题,+1。查看我的答案,获取完整的单行XPath表达式和广泛的解释。 :) – 2011-02-14 14:44:05

+0

@ michael,谢谢:P – 2011-02-15 08:30:43

回答

4

我认为最新的消息在顶部。

使用

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

说明

此表达式选择是在第一个10个item元件中的一个的所有子titledescriptionlinkpubDatecategory元件XML文档。

这是一个常见问题和经常COMMITED错误尝试选择第一(或任何位置元素,说item)由:

//item[1] 

这将选择文档中的所有item元素是第一个孩子他们的父母 - 并且可能有许多这样的元素。

,文件中仅选择所述第一item元件的XPath表达式是:

(//item)[1] 

规则来记住:该[]操作者具有比//缩写更高的优先级(强结合)。

0

你应该尝试

//item[position() <= 10]/pubDate 
只要你想的第10个项目

+0

这是我写的:// item [position()<= 10]/title | // item [position()<= 10]/description | // item [position()<= 10]/link | // item [position()<= 10]/pubDate | // item [position()<= 10]/category,但在执行此查询后,“category”字段将为空 – 2011-02-14 13:02:48

2

我想我的结果限制为10最新 一条消息

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