php DOMDocument nodeName 属性返回 '#text' 和 nodeName

标签 php dom html-parsing

我想提取 html 页面正文的内容及其子页面的 tagNames。我已经采用了这样的示例 html:

<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/>";
}

为什么会这样?

最佳答案

当我遇到这个问题时,它已通过执行以下操作得到解决。

$xmlDoc = new DOMDocument();
$xmlDoc->preserveWhiteSpace = false; // important!

您可以跟踪您的 $node->nodeType 以查看差异。我得到 3、1、3,即使只有一个节点(子节点)。关闭空白,现在我只得到 1。

GL.

关于php DOMDocument nodeName 属性返回 '#text' 和 nodeName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590398/

相关文章:

php - 如何在不离开页面的情况下将姓名插入数据库并在提交页面上显示多个表单

php - 学习如何使用 Guzzle 从 API 访问数据

PHP、PDO 和 SQLSRV 在一个 INSERT 语句上执行多次

javascript - 如何覆盖 appendChild()?

php - 删除 DomXPath 中的最后一个子节点

php - 用 BR 标签替换换行符,但只在 PRE 标签内

php 脚本在 360 秒后停止并显示大文件的 500 服务器错误

javascript - 在指令中使用scope.$watch时出错

php - PHP 网页抓取

java - JSoup 触发器 "java.nio.charset.IllegalCharsetNameException: iso-8859-1"