i have been doing 2 days no luck. tried in both using dom parser class
, loop method both of them confusing lot , couldn't solution.
objective: need wrap h tags div. parent-child relationship h1->h2->h3 , on. so, need wrap div according tree structure.
html
$html='<h1>some text<h1> sometext <h2>some text</h2> sometext <h1>some text<h1> sometext <h2>some text</h2> sometext <h3>some text</h3> sometext';
expected output
<div class="sect1"> <h1>some text<h1> sometext <div class="sect2"> <h2>some text</h2> sometext </div> </div> <div class="sect1"> <h1>some text<h1> sometext <div class="sect2"> <h2>some text</h2> sometext <div class="sect3"> <h3>some text</h3> sometext </div> </div> </div>
attempt 1:
$dom = new domdocument(); $dom->loadhtml($html); $elements = $dom->getelementsbytagname('*'); ($i = 0; $i < $elements->length; $i++) { $element = $elements->item($i); if ($element->tagname == 'h1'){ $wrap1 = $dom->createelement('div'); $wrap1->setattribute('class', 'sect1'); $wrap1->appendchild($element); $dom->appendchild($wrap1); } if ($element->tagname == 'h2'){ $wrap2 = $dom->createelement('div'); $wrap2->setattribute('class', 'sect2'); $wrap2->appendchild($element); $wrap1->appendchild($wrap2); $dom->appendchild($wrap1); } }
attempt 2:
$f=file("extractedadd.xhtml"); for($i=0;$i<count($f);$i++){ if(strpos($f,'<h1 class="title"')!==false); $h1[].=$i; } $h2count=0; $h3count=0; for($j=0;$j<count($h1);$j++){ for($k=$h1[$j];$k<$h1[$j+1];$k++){ if(strpos($f[$k],'<h2 class="title"')!==false){$h2=$h2count+1;} if(strpos($f[$k],'<h3 class="title"')!==false){$h3=$h3count+1;} } if($h2count!=0){ for($z=1;$z<=$h2count;$z++){ $to2.="</div>\n"; } $r=str_replace('<h1 class="title"',$to2."</div>\n".'<h1 class="title"',$h1[$j]); $to2=""; }//something this.
pls help! how expected solution?
i make little more difficulty structure
$html='<h1>some text<h1> sometext <h2>some text</h2> sometext <h2>some text</h2> 1 more sometext <h1>some text<h1> sometext <h2>some text</h2> sometext <h3>some text</h3> sometext'; $level = 0; $array = split("\n", $html); // make array of lines foreach($array $line) { if (preg_match('/\s*\<h(\d+)/i', $line, $matches)) { $l = $matches[1]; // take new level tag h if ($level == $l) echo "</div>\n<div class=\"sect.$l.\">\n"; // same level else { while ($level >= $l) {echo "</div>\n"; $level--; } while ($level < $l) {echo "<div class=\"sect".$l."\">\n"; $level++; } } } echo $line."\n"; } while ($level >= 1) {echo "</div>\n"; $level--; } // close not closed :)
Comments
Post a Comment