PHP 的 DomDocument:获取顶级子节点列表

PHP's DomDocument: Getting a list of top-level children nodes

我想从 HTML 字符串中获取顶级子节点列表。使用 PHP 的 DomDocument,我尝试了以下操作:

$html = new DomDocument();
$html->loadHTML('<p>One</p><p>Two</p><p>Three</p>');
foreach( $html->childNodes as $node ) {
    echo $node->nodeName . ':' . $node->nodeValue. '<br>';
}

不幸的是,我得到的输出是

html:
html:OneTwoThree

我想要的是

paragraph: One
paragraph: Two
paragraph: Three

我错过了什么吗? PHP 文档帮助不大。我在 PHPTester 上尝试使用不同的 PHP 版本,但仍然得到相同的结果。

您可以使用getElementsByTagName()方法:

$html = new DomDocument();
$html->loadHTML('<html><p>One</p><p>Two</p><p>Three</p></html>');
$nodes = $html->getElementsByTagName('p');
foreach($nodes as $node) {
    echo $node->nodeName . ':' . $node->nodeValue. '<br>';
}

// The above results in:
// p:One
// p:Two
// p:Three

我希望这对你的目的来说是等价的。

请记住,DomDocument 会创建一个完整的 dom 文档,而不仅仅是一个文档的片段,因此您的 p 元素应该在 body 元素中。

foreach( $html->getElementsByTagName('body')->item(0)->childNodes as $node ) {