Получение содержимого div (включая дочерние теги) с помощью DOM

Я использую DOM для получения содержимого тега div, но внутренняя часть html не показана. Функция:

$dom = new DOMDocument; libxml_use_internal_errors(true); $dom->loadHTMLFile("$url"); libxml_use_internal_errors(false); $xpath = new DOMXPath($dom); $divTag = $xpath->query('//div[@id="post"]'); foreach ($divTag as $val) { echo $val->getAttribute('title') . ' - ' . $val->nodeValue . "<br />\n"; } 

если источник страницы (только для Div)

 <div id="post">Some text <img src="..." /> <table>some codes</table></div> 

то функция возвращает только

 "Some text " 

но я хочу получить все HTML-элементы, например:

 Some text <img src="..." /> <table>some codes</table> 

Есть ли способ сделать это? Спасибо, прямо сейчас.

Если вы ищете DOMDocument версию innerHTML в браузере DOM, ближайший – saveXML .

 echo $dom->saveXML(val).'<br />\n'; 

(Помните о htmlspecialchars, если вы хотите, чтобы это действительно отображалось как текст.)

outerHTML менее это дает вам outerHTML . Если вам действительно нужен innerHTML , вам нужно будет пропустить каждый из дочерних узлов элемента и передать их в saveXML , а затем их saveXML .

И это только сериализация XML: нет соответствующей версии HTML. saveHTML существует, но может сохранить только весь документ сразу, к сожалению. Если важно, чтобы вы получили устаревший HTML-код, вы можете уйти от него, передав параметр LIBXML_NOEMPTYTAG чтобы убедиться, что раздражающие пустые теги, такие как <script src="..."></script> , не разбиваются браузера.

попробуйте удалить «//» из вашего запроса Xpath …

это говорит парсеру XPath, чтобы затем получить все дочерние узлы … которые ваши HTML-теги …

Ссылка: http://www.w3schools.com/XPath/xpath_syntax.asp

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

Также проверьте XPath Axes: http://www.w3schools.com/xpath/xpath_axes.asp

В основном, что сказал bobince, но я добавляю, что вы можете использовать буферизацию вывода, чтобы получить содержимое, если вы сделаете это в php, не показывая его в html.

 $divTag = $xpath->query('//div[@id="post"]'); ob_start(); foreach ($divTag as $val) { echo $dom->saveXML($val); } $content = ob_get_clean();