Php DOMDocument未将HTML标记制作成DOMNodes
我正试图用DOMDocument类处理一些HTML数据,但是它似乎没有按预期工作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
$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
在子节点之间循环