Sou*_*abh 11 php dom html-parsing
我想提取html页面正文的内容以及其子页面的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>
Run Code Online (Sandbox Code Playgroud)
我已经实现了如下的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.">";
}
Run Code Online (Sandbox Code Playgroud)
这段代码工作得很好,但是当我尝试使用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/>";
}
Run Code Online (Sandbox Code Playgroud)
为什么这样?
Mar*_*ark 16
当我遇到这个问题时,通过执行以下操作解决了这个问题.
$xmlDoc = new DOMDocument();
$xmlDoc->preserveWhiteSpace = false; // important!
Run Code Online (Sandbox Code Playgroud)
您可以跟踪$ node-> nodeType以查看差异.即使只有一个节点(孩子),我得到3,1,3.关闭白色空间,现在我得到1.
GL.