Php DOMDocument未将HTML标记制作成DOMNodes

Php DOMDocument未将HTML标记制作成DOMNodes,php,domdocument,dom-node,Php,Domdocument,Dom Node,我正试图用DOMDocument类处理一些HTML数据,但是它似乎没有按预期工作 $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 DOMD

我正试图用DOMDocument类处理一些HTML数据,但是它似乎没有按预期工作

$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\u str=getElementsByTagName('body')->项(0)//选择保存已加载html数据的正文节点
echo$html\u doc->saveHTML($body\u node);
//按预期产出
//
//你好,世界
// 这是第一段

// 现在,等一下

// 这是最后一次

// 回声计数($body_node->childNodes); //仅输出1个 echo$html\u doc->saveHTML($body\u node->childNodes->item(0)); //输出 //你好,世界

为什么我加载的HTML数据不能识别为单个节点。我希望能够操作body标记中的每个节点,但正如您所看到的,我无法使用cildodes属性将它们作为目标。

$body\u node->childNodes
是一个DOMNodeList对象,它不实现可计数接口。使用
$body\u node->childNodes->length
而不是
count($body\u node->childNodes)

DOMNodeList
实现了可遍历接口,因此您可以使用
foreach
在子节点之间循环