【发布时间】:2013-05-02 23:01:43
【问题描述】:
我使用了一段时间的脚本有问题,但它对我有用,直到我遇到这个问题。
我有一个脚本,我想用它从 html 源代码中删除所有 p html 标记。 该脚本确实有效,部分原因是它只删除了一些 p 标签,但遗漏了一些。
我不明白为什么会这样。
$doc = new DOMDocument();
$a = <<<FAIL
<html><body>
<div style="clear:both"></div>
<p class="articletitle">hoo</p>
<p class="articletext">hmmm</p>
<p class="articletext">hmmmm</p>
<p align="center"></p>
</body></html>
FAIL;
$doc->loadHTML($a);
$list = $doc->getElementsByTagName("p");
foreach ($list as $l) {
$l->parentNode->removeChild($l);
$c++;
}
echo $doc->saveHTML() . $c;
脚本返回
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>
<div style="clear:both"></div>
<p class="articletext">hmmm</p>
<p align="center"></p>
省略两个 p 标签...
你能帮我找出为什么它跳过了一些标签
【问题讨论】:
-
有人使用
HEREDOC,真是奇迹。 -
一般来说,你应该从树的底部向上删除节点,而不是像你一样从顶部->向下删除。如果您在搜索完成后修改树,则 DOM 搜索操作的结果将变为未定义。