2010-03-16 53 views
1

想通过Google使用xpath访问一些链接。下面的工作正常,并显示所有的链接。Xpath有问题PHP

$query = $xpath->evaluate("/html/body//a"); 

    for ($x=0 ; $x < $query -> length; $x++) 
    { 
     $href=$query->item($x); 

       $url=$href->getAttribute('href'); 
     echo $url."<br>"; 
    } 

但是当我尝试下面的XPath没有什么shown..Im确保XPath是正确的怎么把它评估,结果在xpather显示..

/html/body[@id='gsr']/div[@id='cnt']/div[@id='res']/div[1]/ol/li/div//cite 
    for ($x=0 ; $x < $query -> length; $x++) 
    { 
     $href=$query->item($x); 

       $url=$href->getAttribute('cite'); 
     echo $url."<br>"; 
    } 

可以有一个人请告诉我什么我做错了?任何帮助将不胜感激

+0

你可以提供一个示例url来测试脚本吗?或者我们可以只使用_any_谷歌网页? – VolkerK 2010-03-16 09:36:51

+2

表达式必然是复杂的。您可以将其缩减为:'/ div [@ id ='res']/div [1]/ol/li/div // cite',因为ID是唯一的。 而你没有用这个表达式来访问'a'元素,所以链接应该从哪里来? – 2010-03-16 09:41:36

+2

要进行调试,请截断您的长XPath并尝试逐位添加以查看它在哪一点开始不给出结果 - 例如,首先是'/ html/body',然后是'/ html/body [@ id ='gsr']',然后是'/ html/body [@ id ='gsr']/div'等。 – Tomalak 2010-03-16 09:46:37

回答

0

您的XPath表达式选择'cite'元素,然后您在这些元素节点上调用getAttribute('cite')。我不认为HTML'cite'元素应该具有同名的属性。也许不是在'cite'元素节点上调用getAttribute('cite'),而是想要访问$ href-> textContent。