php DOMDocument nodeName属性返回’#text’与nodeName
发布时间:2020-12-13 13:13:56 所属栏目:PHP教程 来源:网络整理
导读:我想提取html页面的body的内容以及其子节点的tagNames.我已经采取了一个这样的例子: htmlhead/headbodyh1This is H1 tag/h1h2This is H2 tag/h2h3This is H3 tag/h3/body/html 我已经实现了下面的php代码,它的工作正常. $d=new DOMDocument();$d-loadHTMLFi
我想提取html页面的body的内容以及其子节点的tagNames.我已经采取了一个这样的例子:
<html> <head></head> <body> <h1>This is H1 tag</h1> <h2>This is H2 tag</h2> <h3>This is H3 tag</h3> </body> </html> 我已经实现了下面的php代码,它的工作正常. $d=new DOMDocument(); $d->loadHTMLFile('file.html'); $l=$d->childNodes->item(1)->childNodes->item(1)->childNodes; for($i=0;$i<$l->length;$i++) { echo "<".$l->item($i)->nodeName.">".$l->item($i)->nodeValue."</".$l->item($i)->nodeName.">"; } 这个代码工作得很好,但是当我尝试使用foreach循环而不是for循环时,nodeName属性返回’#text’与每个实际的nodeName. $l=$d->childNodes->item(1)->childNodes->item(1)->childNodes; foreach ($l as $li) { echo $li->childNodes->item(0)->nodeName."<br/>"; } 为什么这样?
在DOM中,一切都是“节点”.不只是元素(标签);元素之间的注释和文本(即使只是你的例子中的空格或换行符)也是节点.由于文本节点没有实际的节点名称,所以它被#text替代,表示它是一种特殊类型的节点.
显然,当使用item方法手动选择子节点时,文本节点被省略,但在遍历DOMNodeList时包含.我不知道为什么这个类的行为是这样的,别人会不得不回答这个问题. 在nodeName和nodeValue旁边,DOMNode也有一个 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |