@Shimpanze

PHP DomDocument: как проверить, текстовый ли это узел?

Здравствуйте!

Создаю конструкцию:

<?php

$content = <<<'EOD'
<div>
Hello1!

<span>Hello</span>

<p style="color: red;">Привет2!</p>

Привет3!
</div>
EOD;

$content = mb_convert_encoding( $content, 'HTML-ENTITIES', 'UTF-8' );

$dom = new DomDocument();

$dom->loadHTML( $content );

$xpath = new DomXPath( $dom );

// получаю всех прямых потомков у тега div
$elements = $xpath->query( '//body/div/*' );

foreach( $elements as $element ) {
    
  // как здесь проверить, текстовый текущий узел или нет?
  if( $xpath->query( '//text()' ) ) {
    echo "<p>" . $element->C14N() . "</p>";
  }
  // для всех остальных (не текстовых узлов)
  else {
    echo $element->C14N();
  }
  
}

?>


Как здесь проверить текстовый ли текущий узел или нет? Попросту говоря, текстовые нужно обработать отдельно и НЕтекстовые отдельно.

Спасибо!
  • Вопрос задан
  • 205 просмотров
Решения вопроса 1
DevMan
@DevMan
// получаю всех прямых потомков у тега div
$elements = $xpath->query( '//body/div/* | //body/div/text()' );
foreach( $elements as $element ) {
	// как здесь проверить, текстовый текущий узел или нет?
	if( $element->nodeType == 3 ) {
		// текстовая нода
		// отсечение пустых нод добавишь сам, если нужно
		echo "<p>" . trim($element->C14N()) . "</p>", PHP_EOL;
	}
	// для всех остальных (не текстовых узлов)
	else {
		echo $element->C14N(), PHP_EOL;
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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