web-dev-qa-db-ja.com

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要素の取得方法 )が、それを機能させる方法がまだわかりません。

PS:このエラーが発生します:

未定義のメソッドDOMDocument::getElementsByclassName()の呼び出し

11
justberare

私は最終的に次のソリューションを使用しました:

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

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

この問題に私が最も役立ったので、この回答をリンクしました。

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');
7
Ulad Kasach
function getElementsByClassName($dom, $ClassName, $tagName=null) {
    if($tagName){
        $Elements = $dom->getElementsByTagName($tagName);
    }else {
        $Elements = $dom->getElementsByTagName("*");
    }
    $Matched = array();
    for($i=0;$i<$Elements->length;$i++) {
        if($Elements->item($i)->attributes->getNamedItem('class')){
            if($Elements->item($i)->attributes->getNamedItem('class')->nodeValue == $ClassName) {
                $Matched[]=$Elements->item($i);
            }
        }
    }
    return $Matched;
}

// usage

    $dom = new \DOMDocument('1.0'); 
    @$dom->loadHTML($html);
    $elementsByClass = getElementsByClassName($dom, $className, 'h1');
3
Mahbub Alam