php - example - Obtener Element por ClassName con el método DOMdocument()
php dom child node (2)
Esto es lo que estoy tratando de lograr: recuperar todos los productos en una página y ponerlos en una matriz. Aquí está el código que estoy usando:
$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;
Funciona para el $title but
no para el producto. Para obtener información, en el código HTML, la etiqueta img se ve así:
<img alt="" class="productImage" data-altimages="" src="xxxx">
He estado viendo esto ( PHP DOMDocument ¿cómo obtener el elemento? ), Pero todavía no entiendo cómo hacerlo funcionar.
PD: obtengo este error:
Llamada al método indefinido
DOMDocument::getElementsByclassName()
Finalmente utilicé la siguiente solución:
$classname="blockProduct";
$finder = new DomXPath($doc);
$spaner = $finder->query("//*[contains(@class, ''$classname'')]");
https://.com/a/31616848/3068233
Vincular esta respuesta ya que me ayudó más con este problema.
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;
}
Aquí está el código y aquí está el uso
$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'');