Проблема PHP Dom, как вставить HTML-код в конкретный div - PullRequest
1 голос
/ 05 июня 2010

Я пытаюсь заменить html-код внутри div 'resultsContainer' на html $ response.

Результатом моего неудачного кода является то, что содержимое «resultsContainer» остается, и HTML-код $ response отображается на экране в виде текста, а не анализируется как HTML.

Наконец, я бы хотел внедрить содержимое $ response в 'resultContainer' без необходимости создания какого-либо нового div, мне нужно это: <div id='resultsContainer'>Html inside $response here...</div> и НЕ ЭТО: <div id='resultsContainer'><div>Html inside $response here...</div></div>

   // Set Config
      libxml_use_internal_errors(true);   

      $doc = new DomDocument();
      $doc->strictErrorChecking = false;  
      $doc->validateOnParse = true;

      // load the html page
      $app = file_get_contents('index.php');

      $doc->loadHTML($app);

      // get the dynamic content
      $response = file_get_contents('search.php'.$query);
      $response = utf8_decode($response);         

      // add dynamic content to corresponding div
      $node = $doc->createElement('div', $response);
      $doc->getElementById('resultsContainer')->appendChild($node);


      // echo html snapshot
      echo $doc->saveHTML();

1 Ответ

1 голос
/ 05 июня 2010

, если $ reponse - простой текст:

// add dynamic content to corresponding div
$node = $doc->createTextNode($response);
$doc->getElementById('resultsContainer')->appendChild($node);

если он (может) содержать html (можно использовать createDocumentFragment, но это создает собственный набор проблем с сущностями, dtd и т.

// add dynamic content to corresponding div
$frag = new DomDocument();
$frag->strictErrorChecking = false;  
$frag->validateOnParse = true;
$frag->loadHTML($response);
$target = $doc->getElementById('resultsContainer');
if(isset($target->childNodes) && $target->childNodes->length)){
    for($i = $target->childNodes->length -1; $i >= 0;$i--){
        $target->removeChild($target->childNodes->item($i));
    }
}
//if there's lots of content in $target, you might try this:
//$target->parentNode->replaceChild($target->cloneNode(false),$target);
foreach($frag->getElementsByTagName('body')->item(0)->childNodes as $node){
   $target->appendChild($doc->importNode($node,true));
}

То, что на самом деле не подходит (или, по крайней мере, неуклюже) для использования DOMDocuments в качестве движка шаблонов.

...