DOMDocument не превращает HTML-теги в DOMNodes
Я пытаюсь манипулировать некоторыми данными HTML с помощью класса DOMDocument, однако он не работает должным образом.
$html_str = <<< 'EOD'
<h1>Hello world</h1>
<p>This is the first paragraph</p>
<p>Now for a second</p>
<p>This is the last</p>
EOD;
$html_doc = new DOMDocument();
$html_doc->loadHTML( $html_str ); //loadHTML wraps code in html and body nodes
$body_node = $html_doc->getElementsByTagName( 'body' )->item( 0 ); //Select body node which is holding loaded html data
echo $html_doc->saveHTML( $body_node );
//Outputs as expected
//<body>
//<h1>Hello world</h1>
//<p>This is the first paragraph</p>
//<p>Now for a second</p>
//<p>This is the last</p>
//</body>
echo count( $body_node->childNodes );
//Outputs only 1
echo $html_doc->saveHTML( $body_node->childNodes->item( 0 ) );
//Outputs
//<h1>Hello world</h1>
Почему загруженные мной HTML-данные не распознаются как отдельный узел. Я хочу иметь возможность манипулировать каждым из тех узлов, которые находятся внутри этого тега body, но, как вы можете видеть, я не могу ориентировать их, используя свойство cildeNodes.
1 ответ
$body_node->childNodes
является объектом DOMNodeList, который не реализует интерфейс Countable. использование $body_node->childNodes->length
вместо count($body_node->childNodes)
,
DOMNodeList
реализует интерфейс Traversable, поэтому вы можете перебирать дочерние узлы, используя foreach
,