DOMDocument没有将HTML标记转换为DOMNode

时间:2013-09-10 21:07:15

标签: 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 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 个答案:

答案 0 :(得分:0)

$body_node->childNodes是一个DOMNodeList对象,它不实现 Countable 接口。使用$body_node->childNodes->length代替count($body_node->childNodes)

DOMNodeList确实实现了 Traversable 接口,因此您可以使用foreach遍历子节点。