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 ) {
我想从 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 ) {