2013-12-22 32 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'); 
相关问题