2011-02-14 123 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 
]