2013-04-10 58 views
1

我正在使用PHP的DomDocument類來解析HTML。DomDocument_object-> getElementsByTagName('a');返回一個空數組,當頁面上有錨時

當我給它錨定它,並要求它找到所有錨並將它們存儲在一個數組中,它給了我一個空的數組,就好像沒有錨。

爲什麼它這樣做,我該如何解決它?

下面是代碼:

$dom = new DOMDocument(); 
$domObject->loadHTML($content); 
$anchors = $domObject->getElementsByTagName('a'); 
print_r($anchors); // returns empty array. 

和$內容是這樣的:

 <p> 
     Friend David, I do not think we shall need a call bell as Hello! can be heard 10 to 20 feet away. What you think? Edison - P.S. first cost of sender & receiver to manufacture is only $7.00.[12] Hello, hello! New York, hello! 
     </p> 
     <a href="http://the-irf.com/hello/hello5.html">Prev</a> 
     <a href="hello7.html">Next</a> 
     <a href="end.html">End</a> 
    </body> 
</html> 
+0

你能發佈整個html嗎? – hek2mgl 2013-04-10 23:50:12

+0

@ hek2mgl 這就是$ content中的所有html – 2013-04-11 00:01:20

回答

2

哪裏$domObject被設置在哪裏?試試這個:

$matchList = array(); 
$dom = new DOMDocument(); 
$dom->loadHTML($content); 
$anchors = $dom->getElementsByTagName('a'); 
foreach($anchors as $anchor) { 
    array_push($matchList, $anchor->getAttribute('href')); 
} 
var_dump($matchList); 
+0

對不起,我也有$ domObject作爲DOMDocument在代碼中的一個實例。但我試過你的解決方案,但它仍然無法正常工作。 – 2013-04-11 00:00:46

+0

檢查其他答案,以正確的方式來解析'對象'@ArashDonsaliKapoor – faino 2013-04-11 00:01:44

1

注意,代碼 - 固定$dom/$domNode錯字後,將不會返回一個空數組。相反,它返回:

DOMNodeList Object 
(
) 

這意味着它已經返回一個只有私有屬性的對象。因此在print_r()輸出中看起來爲空。

但是結果不是空的,並且DOMNodeList實現了Iterator接口。所以,你可以在搜索結果中迭代:

foreach($anchors as $anchor) { 
    var_dump($anchor->nodeValue); 
} 

更簡單的方法,只是檢查,如果結果不是空的,是檢查節點列表的長度:

echo "The query returned " . $anchors->length . " nodes"; 

這裏來一個完整的例子:

$html = <<<EOF 
<html> 
    <head></head> 
    <body> 
    <p> 
     Friend David, I do not think we shall need a call bell as Hello! can be heard 10 to 20 feet away. What you think? Edison - P.S. first cost of sender & receiver to manufacture is only $7.00.[12] Hello, hello! New York, hello! 
     </p> 
     <a href="http://the-irf.com/hello/hello5.html">Prev</a> 
     <a href="hello7.html">Next</a> 
     <a href="end.html">End</a> 
    </body> 
</html> 
EOF; 

$domObject = new DOMDocument(); 
$domObject->loadHTML($html); 
$anchors = $domObject->getElementsByTagName('a'); 

$links = array(); 
foreach($anchors as $anchor) { 
    $links[] = $anchor->getAttribute('href'); 
} 

var_dump($links); 

輸出

string(36) "http://the-irf.com/hello/hello5.html" 
string(11) "hello7.html" 
string(8) "end.html" 
+0

好的趕上,謝謝。 – faino 2013-04-10 23:58:36

+0

現在應該工作。不是嗎? – hek2mgl 2013-04-11 00:02:09

+0

現在我正在做的是使用gerAttribute獲取錨點的href,因爲這是我所需要的。我使用的是foreach,而不是使用var_dump我有'array_push($ matchList,(string)($ anchor-> getAttribute('href')));'當我嘗試打印$ matchList時,它是空的。 – 2013-04-11 00:03:59

相關問題