选择XPath查询

选择XPath查询

问题描述:

我用下面的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

我怀疑,既然$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