2013-05-08 3 views
3

나는이 문제를 해결할 때까지 약간의 시간 동안 사용해 왔던 스크립트에 문제가 있습니다.DOM PHP는 태그 이름으로 모든 태그를 삭제합니다.

나는 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> 

두 페이지 태그 ... 그것은 어떤 태그

+0

누군가 'HEREDOC', 이 얼마나 기적인가. –

+0

일반적으로 말하자면, 트리의 맨 아래에서 위쪽 -> 아래쪽으로 노드를 삭제해야합니다. 검색이 완료된 후 트리를 수정하면 DOM 검색 작업의 결과가 정의되지 않습니다. –

답변

8

이 방법을 시도를 건너 뛰는 왜

당신이 찾아 좀 도와 주실 래요을 떠나 반환합니다 :

$doc->loadHTML($a); 
$list = $doc->getElementsByTagName("p"); 

while ($list->length > 0) { 
    $p = $list->item(0); 
    $p->parentNode->removeChild($p); 
} 
관련 문제