Экспортировать определенный элемент в DOMDocument в строку

Я импортирую некоторый произвольный HTML в DOMDocument используя loadHTML() , например:

 $html = '<p><a href="test.php">Test</a></p>'; $doc = new DOMDocument; $doc->loadHTML($html); 

Затем я хочу изменить несколько атрибутов / значений узлов, используя методы DOMDocument которые я не могу решить.

После внесения этих изменений я хотел бы экспортировать строку HTML (используя ->saveHTML() ) без тегов <html><body>... которые DOMDocument автоматически добавляет в HTML.

Я понимаю, почему они добавлены (чтобы обеспечить действительный документ), но как я могу просто получить мой отредактированный HTML обратно (по существу, все между тегами <body> )?

Я прочитал этот пост и, хотя он предлагает некоторые решения, я предпочел бы сделать это «правильно», то есть без использования замены строки в тегах <body> . Валидность HTML не является проблемой, поскольку она выполняется через очиститель HTML перед началом работы.

Есть идеи? Благодарю.

РЕДАКТИРОВАТЬ

Я знаю параметр $node добавленный в saveHTML() в PHP 5.3.6, к сожалению, я застрял с 5.2.

Solutions Collecting From Web of "Экспортировать определенный элемент в DOMDocument в строку"

Возможно, исходный код этого поможет – они используют регулярное выражение для выделения ненужных строк:

http://beerpla.net/projects/smartdomdocument-a-smarter-php-domdocument-class/

 $content = preg_replace(array("/^\<\!DOCTYPE.*?<html><body>/si", "!</body></html>$!si"), "", $this->saveHTML()); return $content; 

saveHTMLExact () – DOMDocument имеет чрезвычайно плохо спроектированную «функцию», где, если код HTML, который вы загружаете, не содержит тегов <html> и <body> , он автоматически добавляет их (yup, флаги не отключены) ,

Таким образом, когда вы вызываете $ doc-> saveHTML (), ваш недавно сохраненный контент теперь имеет <html><body> и DOCTYPE . Не очень удобно при попытке работать с фрагментами кода (аналогичная проблема с XML).

SmartDOMDocument содержит новую функцию saveHTMLExact (), которая делает именно то, что вы хотите – она ​​сохраняет HTML без добавления лишнего мусора, который делает DOMDocument.

Кроме того, другие вопросы задавали аналогичные вопросы:

Как сохранитьHTML DOMDocument без оболочки HTML?

Попробуйте использовать DOMDocument-> saveXML ()?

 <?php $html = '<p><a href="test.php">Test</a></p>'; $doc = new DOMDocument(); $doc->loadHTML($html); $domnodelist = $doc->getElementsByTagName('p'); $domnode = $domnodelist->item(0); echo $doc->saveXML($domnode); ?> 

Он выводит <p><a href="test.php">Test</a></p>

Спасибо, но я не обязательно буду знать тип первого тега в теле, он должен быть общим

 $domnodelist = $doc->getElementsByTagName('*'); $domnode = $domnodelist->item(0); echo $doc->saveXML($domnode);