Задать вопрос
@TillTill

PHP+XPath, как выпарсить фрагмент html без необходимости обхода в результирующем объекте всех вложенных узлов для сохранения результата?

Пытаюсь получить фрагмент html, содержащий множество child nodes. Пример:
<body>
<table>...</table>
<div>
    <p>Sometext 1<br> Sometext2</p>
    <p>Sometext 3</p>
</div>
</body>

Нужно получить содержимое тега div с сохранением вложенных тегов и текста.
Вариант реализации в связке PHP+XPath:
$xquery = '//div/node()';
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$results = $xpath->query($xquery);

И дальше, чтобы сохранить результат, нужно обойти в цикле все полученные узлы:
foreach($results as $key){
	$parsed_html .= $key->nodeValue;
}

Как можно получить требуемый кусок html без необходимости обхода в цикле всех вложенных узлов в результирующем объекте?
  • Вопрос задан
  • 3580 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
glebovgin
@glebovgin
Full Stack Web Developer
Вот пример работающего кода, но советую сделать его отдельным методом или функцией хотя бы, чтобы передавать в нее DOMNode:

$results = $xpath->query('//div[@class="example"]'); // тут путь до элемента, внутренности которого нужны
$innerHTML = ''; 
$children = $results->item(0)->childNodes;
foreach ($children as $child) 
	$innerHTML .= $results->item(0)->ownerDocument->saveHTML($child);

echo $innerHTML; // тут все внутренности
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
проще регуляркой имхо. И быстрее. И памяти меньше сожрет.
Ну или implode("",$results);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы