С небольшим обновлением вашего кода, чтобы более четко показать содержимое, которое он использует, вы можете видеть, откуда поступают данные ...
function recurceHTML ($node, $spaces)
{
$nextIndent = $spaces . ' ';
print ($spaces . $node->nodeName."->".$node->nodeType . NEWLINE);
if ( $node->nodeType == 1 ) {
foreach($node->childNodes as $childNode)
{
recurceHTML ($childNode, $nextIndent);
}
}
}
$dom = new DOMDocument();
$dom->loadHTML($html);
$spaces = ' ';
echo $dom->saveHTML().PHP_EOL;
foreach ($dom->childNodes as $child)
{
recurceHTML ($child, $spaces);
}
Первый echo
показывает фактический документ, с которым он работает ...
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head></head><body><h1>Content 1</h1><h2>Content 1.1</h2><h3>Content 1.1.1</h3></body></html>
Как вы можете видеть - в документе также указан тип документа.
Тогда у вас есть вывод основной функции ...
html->10
html->1
head->1
body->1
h1->1
#text->3
h2->1
#text->3
h3->1
#text->3
Выходные данные после tagName показывают тип узла , первый - 10, который является DOMDocumentType (<!DOCTYPE html PUBLIC "-//W3...
), затем второй тип 1, который XML_ELEMENT_NODE
, который является вашим <html>
тегом.
Поскольку вы используете loadHTML
- это всегда будет пытаться создать действительный документ HTML - это включает в себя добавление типа документа, а также тегов <html>
и т. Д., Которые понадобятся на обычной странице HTML.