Jest to pewien katalog kategorii. W <div> jest kategoria głowna, a w <div class="mg1"> jest kategoria podrzędna. Reszta div'ów mnie nie interesuje. Muszę powyciągać tylko te dwa div'y a dokładnie <span> z tych divów.
Co najgorsze chyba, to fakt taki że ten plik html zajmuje jakies 4mln znaków.
Próbowałem podejść do tego wyrażenie regularnym:
ale wtedy pobiera wszystkie div'y.
Udało mi się to w miarę osiągnąc poprzez XML:
function parse_cats(){ //$out_clear=utf8_encode($div_input); $dom=new DOMDocument(); $dom->loadHTML($div_input); $dom->preserveWhiteSpace=false; $sxml = simplexml_import_dom($dom); $elem=$sxml->body->div; $_flag=false; $outxml=""; foreach ($elem as $node){ if (!$node->attributes()){ if ($_flag){ $outxml.='</cat>'; } $outxml.='<cat name="'.$node->span[0].'">'; $_flag=false; }else{ foreach ($node->attributes() as $att=>$val){ if ($att=="class"&&$val=="mg1"){ $_flag=true; $outxml.='<subcat>'.$node->span[0].'</subcat>'; } } } } $outxml='<categories>'.$outxml.'</cat></categories>'; $out=simplexml_load_string($outxml); $out->asXML('index_parsed.xml'); } parse_cats();
Funkcja ta działa dla małego pliku index.html, niestety nie działa przy większym.
Dostaję błąd:
error: Excessive depth in document: 256 use XML_PARSE_HUGE option
Co radzicie
