Как я могу получить сериализованный HTML-код элемента с DOMDocument PHP?

Это мой пример скрипта:

$html = <<<HTML <div class="main"> <div class="text"> Capture this text 1 </div> <div class="date"> May 2010 </div> </div> <div class="main"> <div class="text"> Capture this text 2 </div> <div class="date"> June 2010 </div> </div> HTML; $dom = new DOMDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); $tags = $xpath->query('//div[@class="main"]'); foreach ($tags as $tag) { print_r($tag->nodeValue."\n"); } 

Это позволит:

 Capture this text 1 May 2010 Capture this text 2 June 2010 

Но мне это нужно:

 <div class="text"> Capture this text 2 </div> <div class="date"> June 2010 </div> 

Или, по крайней мере, вы можете сделать что-то подобное в моем цикле foreach:

 $text = $tag->query('//div[@class="text"]')->nodeValue; $date = $tag->query('//div[@class="date"]')->nodeValue; 

Ну, nodeValue даст вам значение узла. Вы хотите, что обычно называется outerHTML

 echo $dom->saveXml($tag); 

будет выводить то, что вы ищете, в способе X (HT) ML.


Начиная с PHP 5.3.6 вы также можете передать узел saveHtml , который ранее не был возможен:

 echo $dom->saveHtml($tag); 

Последний будет подчиняться синтаксису HTML4. Спасибо Артефакто за это.

попробуй это

 $dom = new DOMDocument(); $dom->loadHTML($html); $xpath = new DOMXPath($dom); $tags = $xpath->query('//div[@class="main"]'); foreach ($tags as $tag) { $innerHTML = ''; $children = $tag->childNodes; foreach ($children as $child) { $tmp_doc = new DOMDocument(); $tmp_doc->appendChild($tmp_doc->importNode($child,true)); $innerHTML .= $tmp_doc->saveHTML(); } var_dump(trim($innerHTML)); } 

-Паскаль МАРТИН