2013-02-12 2 views
3

Как создать DOMNode из строки фрагмента HTML, если, конечно, строка содержит один корневой узел?Создайте DOMNode из строки фрагмента HTML

+1

http://www.php.net/manual/en/domdocument.createdocumentfragment.php –

+0

@MarcB Это не позволяет создавать узел из разметки, хотя, do это так? –

+0

нет. но как только вы получите фрагмент, вы можете AppendChild вставить его в dom. –

ответ

1

DOMDocumentFragments действительно есть() метод с loadXML

libxml_use_internal_errors(1); 

$opts = array('http' => array('header' => 'Accept-Charset: ISO-8859-1, *;q=0')); 
$context = stream_context_create($opts); 
$html = file_get_contents('http://multiple.webcindario.com/wstest.php' , false , $context); 

$html = html_entity_decode(htmlentities($html, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1'); 
ob_clean(); 
$classname = "product"; 
$domdocument = new DOMDocument(); 
$domdocument->preserveWhiteSpace = true; 
$domdocument->formatOutput  = false; 
$domdocument->loadHTML($html); 
$xpath = new DOMXPath($domdocument); 
$found = $xpath->query("//*[contains(concat(' ', normalize-space(@class), ' '), ' $classname ')]"); 

$newHTML="<div class='foo bar'><p>This is <b>an <i>example</i></b> paragraph <a href='#!'>#!</a></p></div>"; 
$newHTML = html_entity_decode(htmlentities($newHTML, ENT_QUOTES, 'UTF-8'), ENT_QUOTES , 'ISO-8859-1'); 

foreach($found as $oldnode){ 
    $frag = $domdocument->createDocumentFragment(); 
    $frag->appendXML($newHTML); 
    $oldnode->appendChild($frag); 
    $updatedHTML=$domdocument->saveHTML(); 
} 

например: http://multiple.webcindario.com/addNodefromHTML.php

(это добавляет пример пункт как chilNode к выбранным узлам источника)