Возможный дубликат:
Как вставить HTML в PHP DOMNode?
Продолжая этот вопрос , вот код, который я собираюсь начать использовать:
function getHTMLDOMSegment( $file ) { $doc = new DOMDocument(); $doc->loadHTMLFile( $file ); $body = $dom->getElementsByTagName('body')->item(0); return $body->childNodes; }
Затем я просто перебирал детей, используя importNode и добавляя каждый, где бы они ни находились, в другой DOMDocument, загруженный в HTML.
Правильно ли это звучит?
Изменить. Чтобы быть ясным, поскольку исходные файлы, с которыми я работаю, могут быть не «правильными» XHTML, мне нужно пройти через loadHTMLFile, как это, несмотря ни на что.
Кроме того, поскольку это может потребоваться для работы с большим количеством содержимого HTML, моя цель также быть эффективной.
Я несколько неохотно отвечаю на этот вопрос, потому что это в основном просто более длинная версия того, что Artefacto и я уже сказал вам, но в любом случае.
Вы можете либо добавить необработанное поддерево XML, либо добавить его через фрагмент
DOMDocumentFragment::appendXML
– добавление необработанных данных XML Или используйте
DOMDocument::importNode
– DOMDocument::importNode
узел в текущий документ Обратите внимание, что вы можете глубоко импортировать целые деревья, передав TRUE
в качестве второго аргумента.
Примеры:
$a = <<< HTML <div> <h2>Hello World</h2> <p> I am from the <abbr title="source">src</abbr> document<br/></p> </div> HTML; $b = <<< HTML <h1>Importing Fragments</h1> HTML;
Использование фрагментов:
$dest = new DOMDocument; $dest->loadHTML($b); $fragment = $dest->createDocumentFragment(); $fragment->appendXML($a); $dest->getElementsByTagName('h1')->item(0)->appendChild($fragment); echo $dest->saveHTML();
Использование импорта:
$dest = new DOMDocument; $dest->loadHTML($b); $src = new DOMDocument; $src->loadHTML($a); $dest->getElementsByTagName('h1')->item(0)->appendChild( $dest->importNode( $src->getElementsByTagName('div')->item(0), TRUE ) ); echo $dest->saveHTML();
Выход для обоих из них был бы чем-то вроде
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html><body><h1>Importing Fragments<div> <h2>Hello World</h2> <p> I am from the <abbr title="source">src</abbr> document<br></p> </div></h1></body></html>
Если вас беспокоит, какой из них лучше работает, я предлагаю сравнить их в реальных условиях, например, в вашем приложении. Тогда судите сами, что подходит вашим потребностям.