@Bestolkovy

Как с помощью DOMDocument() перебрать все HTML-теги первого уровня в переменной?

Доброе утро!

Есть переменная $content со следующим содержимым:

<div><!-- этот -->
  <p>Lorem.</p>
</div>

<pre><!-- этот -->
  <code>
    echo "Hello, World!";
  </code>
</pre>

<p>Hello.</p><!-- этот -->

<table><!-- этот -->
  <tbody>
    ...
  </tbody>
</table>

и т. д.


Скажите пожалуйста, как перебрать (получить в массив и потом перебрать?) все элементы первого (нулевого?) уровня (отмеченные для примера)?

Попросту говоря, проверить каждый элемент на соответствие нулевому уровню и если соответствует, поместить его в массив, чтобы потом обработать с помощью foreach.
  • Вопрос задан
  • 319 просмотров
Пригласить эксперта
Ответы на вопрос 2
@none7
$doc = new DOMDocument();
$doc->loadHTML($content);
$xpath = new DOMXPath($doc);
$nodes = $xpath->query("/html/body/*");

foreach($nodes as $node)
    echo $node->nodeName, "\n";
Ответ написан
Комментировать
@krypt3r
Примерный код
<?php
$content = <<<EOD
<div id="first"><!-- этот -->
  <p>Lorem.</p>
</div>

<pre id="second"><!-- этот -->
  <code>
    echo "Hello, World!";
  </code>
</pre>

<p id="third">Hello.</p><!-- этот -->

<table id="fourth"><!-- этот -->
  <tbody>
    Content
  </tbody>
</table>
EOD;

$dom = new DOMDocument('1.0', 'UTF-8');
$dom->loadHTML($content);
$xpath = new DOMXPath($dom);
$tags = $xpath->query('/html/body/*');
foreach ($tags as $node) {
    echo $node->nodeName, "\t", $node->attributes->getNamedItem('id')->nodeValue, "\n";
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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