2013-12-22 85 views
8

以下是我想要實現的:檢索頁面上的所有產品並將它們放入數組中。這裏是我使用的代碼:通過ClassName和DOMdocument()獲取元素方法

$page2 = curl_exec($ch); 
$doc = new DOMDocument(); 
@$doc->loadHTML($page2); 
$nodes = $doc->getElementsByTagName('title'); 
$noders = $doc->getElementsByClassName('productImage'); 
$title = $nodes->item(0)->nodeValue; 
$product = $noders->item(0)->imageObject.src; 

它的工作原理爲$title but不是產品。對於信息,在HTML代碼img標籤看起來是這樣的:

<img alt="" class="productImage" data-altimages="" src="xxxx"> 

我一直在尋找這個(PHP DOMDocument how to get element?),但我還是不明白如何使其發揮作用。

PS:我得到這個錯誤:

調用未定義的方法DOMDocument::getElementsByclassName()

+0

這個問題很奇怪,因爲OP彌補自己的不併存的方法。 – Raptor

回答

24

我終於用以下解決方案:

$classname="blockProduct"; 
    $finder = new DomXPath($doc); 
    $spaner = $finder->query("//*[contains(@class, '$classname')]"); 
+0

更正確的xpath變體在重複問題中顯示爲答案:[調用未定義的方法DOMDocument :: getElementsByClassName()](http://stackoverflow.com/a/33446305/367456) – hakre

2

https://stackoverflow.com/a/31616848/3068233

鏈接這個答案因爲它對我幫助最大有這個問題。

function getElementsByClass(&$parentNode, $tagName, $className) { 
    $nodes=array(); 

    $childNodeList = $parentNode->getElementsByTagName($tagName); 
    for ($i = 0; $i < $childNodeList->length; $i++) { 
     $temp = $childNodeList->item($i); 
     if (stripos($temp->getAttribute('class'), $className) !== false) { 
      $nodes[]=$temp; 
     } 
    } 

    return $nodes; 
} 

即使世界的代碼和繼承人的使用

$dom = new DOMDocument('1.0', 'utf-8'); 
$dom->loadHTML($html); 
$content_node=$dom->getElementById("content_node"); 

$div_a_class_nodes=getElementsByClass($content_node, 'div', 'a'); 
相關問題