Я пытаюсь создать новый урезанный DOM, но не могу найти способ взять строку HTML, возвращенную из DOMDocument::saveHTML()
, и вставить ее в новый DOMDocument
.
Я хочу взять $courseHTML
и добавить его к узлу <body>
.
Возможно ли это, или мой подход не оптимален?
// grab the original DOM
$doc = new DOMDocument();
$doc->loadHTML($content, LIBXML_HTML_NOIMPLIED);
$body = $doc->getElementsByTagName('body');
// create a new DOM just for the <body> content
$mock = new DOMDocument();
foreach ($body->item(0)->childNodes as $child) {
$mock->appendChild($mock->importNode($child, true));
}
$courseHTML = $mock->saveHTML();
// create a new, stripped-down DOM
$doc = new DOMDocument();
$html = $doc->appendChild($doc->createElement('html'));
$head = $html->appendChild($doc->createElement('head'));
$node = $head->appendChild($doc->createElement('meta'));
$node->setAttribute('charset', 'utf-8');
$node = $head->appendChild($doc->createElement('meta'));
$node->setAttribute('name', 'viewport');
$node->setAttribute('content', 'width=device-width, initial-scale=1');
$style = $head->appendChild($doc->createElement('style'));
$style->setAttribute('type', 'text/css');
$rangersCSS = $doc->createTextNode('@import url("https://crmpicco.co.uk/grfc1872.css");');
$style->appendChild($rangersCSS);
$body = $html->appendChild($doc->createElement('body'));
$body->setAttribute('id', 'crmpicco_course');
$doc->formatOutput = true;
$content = '<!DOCTYPE html>';
$content .= $doc->saveHTML();
Кроме того, есть ли более чистый способ добавить DOCTYPE
в DOM, кроме конкатенации строк?