working simplexmlelement simplexml_load_string simplexml_load_file not new error array php html web-scraping simpledom

simplexmlelement - string xml to array php



simplexml no carga las clases de etiquetas<a>? (1)

Tengo un poco de php que toma el html de una página y lo carga en un objeto simplexml. Sin embargo, no está obteniendo las clases del elemento dentro de un

El php

//load the html page with curl $html = curl_exec($ch); curl_close($ch); $doc = new DOMDocument(); $doc->loadHTML($html); $sxml = simplexml_import_dom($doc);

La página html. Que si hago un var_dump de $ html muestra que ha sido raspado y existe en $ html

<li class="large"> <a style="" id="ref_3" class="off" href="#" onmouseover="highlightme(''07'');return false;" onclick="req(''379'');return false;" title="">07</a> </li>

El var_dump (abajo) de $ doc y $ sxml muestra que falta una clase de ''off''. Lamentablemente, necesito procesar la página según esta clase.

[8]=> object(SimpleXMLElement)#50 (2) { ["@attributes"]=> array(1) { ["class"]=> string(16) "large" } ["a"]=> string(2) "08" }


Usando simplexml_load_file y xpath , vea los comentarios en línea.

Lo que buscas, en realidad, una vez que encuentras el elemento que necesitas es este

$row->a->attributes()->class=="off"

Y el código completo a continuación:

// let''s take all the divs that have the class "stff_grid" $divs = $xml->xpath("//*[@class=''stff_grid'']"); // for each of these elements, let''s print out the value inside the first p tag foreach($divs as $div){ print $div->p->a . PHP_EOL; // now for each li tag let''s print out the contents inside the a tag foreach ($div->ul->li as $row){ // same as before print " - " . $row->a; if ($row->a->attributes()->class=="off") print " *off*"; print PHP_EOL; // or shorter // print " - " . $row->a . (($row->a->attributes()->class=="off")?" *off*":"") . PHP_EOL; } } /* this outputs the following Person 1 - 1 hr *off* - 2 hr - 3 hr *off* - 4 hr - 5 hr - 6 hr *off* - 7 hr *off* - 8 hr Person 2 - 1 hr - 2 hr - 3 hr - 4 hr - 5 hr - 6 hr - 7 hr *off* - 8 hr *off* Person 3 - 1 hr - 2 hr - 3 hr - 4 hr *off* - 5 hr - 6 hr - 7 hr *off* - 8 hr */