2012-07-31 89 views
1

我用下面的PHP代碼來獲取URL的形式隨機量的XPath查詢的第N個元素:選擇XPath查詢

@$dom = new DOMDocument(); 
@$dom->loadHTML($rawPage); 
@$xpath = new DOMXPath($dom); 
@$itemCells = $xpath->query("//td[@width=120]/a"); 

我需要從池中隨機挑選一個URL,這樣我可以訪問它通過cURL。

我想什麼做的是瞭解有多少URL被發現,所以我可以使用count的是,由於rand(0 , $itemCells->length)

最大但它告訴我,$itemCell無法使用類型的DOMNodeList的對象數組和我的蘭特()蘭德()期望參數2很長,對象給出

也許有更好的方式去做這件事。

+1

你嘗試從節約的價值' - > length'到一個局部變量第一? '$ max = $ itemCells-> length; $ rand = rand(0,$ max);'。那麼你應該可以做'$ random_node = $ itemCells-> item($ rand);'。 – nickb 2012-07-31 19:26:11

+0

謝謝@nickb,似乎照顧隨機()問題。但是,$ itemCell問題仍然存在。 – KiloJKilo 2012-07-31 19:29:41

+0

'$ itemCell'有什麼問題? – nickb 2012-07-31 19:33:25

回答

2

我懷疑,既然$lengthreadonly屬性,你會遇到麻煩,將它傳遞給一個函數。所以,解決的辦法是從一個DOMNodeList$length值先保存到一個局部變量,然後調用rand(),就像這樣:

$max = $itemCells->length; 
$rand = rand(0, $max); 

那麼你應該能夠做到這一點抓住從列表中隨機節點:

$random_node = $itemCells->item($rand); 

從那裏,搶URL,你會怎麼做:

$url = $random_node->attributes->getNamedItem("href")->nodeValue; 
+0

謝謝,現在如何將url檢索部分添加到$ itemCells-> item($ rand); – KiloJKilo 2012-07-31 19:36:37

+0

我已經更新了我的答案。如果它不適合你,請告訴我。 – nickb 2012-07-31 19:38:54

+0

太棒了! - >如果你想更新你的答案,nodeValue是正確的方法。 :) – KiloJKilo 2012-07-31 19:42:50