Это лучший способ импортировать тело DOMDocument (HTML) в другое?

Возможный дубликат:
Как вставить 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::importNodeDOMDocument::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> 

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