Ben bir HTML dosyasından boş paragraflar kaldırır PHP bir komut dosyası var. Boş paragrafları TextContent olmayanlara <p></p>
unsurlardır.
HTML File with Empty Paragraphs:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
This page is used with remove_empty_paragraphs.php script.
This page contains empty paragraphs. The script removes the empty paragraphs and
writes a new HTML file.
-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<p>This is a paragraph.</p>
<!-- Below is an empty paragraph. -->
<p><span></span></p>
<p>This is another paragraph.</p>
<!-- Below is another empty paragraph. -->
<p class=MsoNormal><b></b></p>
<p style=''></p>
<p>
<span lang=EN-US style='font-size:5.0pt;color:navy;mso-ansi-language:EN-`US'></span>
</p>
</body>
</html>
First Attempt:
$html = new DOMDocument("1.0", "UTF-8");
$html->loadHTMLFile("HTML File with Empty Paragraphs.html");
$pars = $html->getElementsByTagName("p");
/* removeChild foreach-loop */
foreach ($pars as $par) {
if ($par->textContent == "") {
$par->parentNode->removeChild($par);
}
}
$html->saveHTMLFile("HTML File WithOut Empty Paragraphs.html");
This succeeds için:
- style-niteliği olmayan boş paragraflar kaldırmak,
but fails için:
- remove empty paragraphs with the style-attribute.
Yani removeChild foreach döngü önce removeStyleAttribute foreach-döngü yerleştirin. (Ben nonempty paragrafların stil özelliklerini kaldırarak umursamıyorum.)
Second Attempt:
$html = new DOMDocument("1.0", "UTF-8");
$html->loadHTMLFile("HTML File with Empty Paragraphs.html");
$pars = $html->getElementsByTagName("p");
/* removeStyleAttribute foreach-loop */
foreach ($pars as $par) {
if ($par->hasAttribute("style")) {
$par->removeAttribute("style");
}
}
/* removeChild foreach-loop */
foreach ($pars as $par) {
if ($par->textContent == "") {
$par->parentNode->removeChild($par);
}
}
$html->saveHTMLFile("HTML File WithOut Empty Paragraphs.html");
This succeeds in:
- stil özniteliği boş paragraflardan stil özelliklerini kaldırarak.
- style-niteliklerini yok boş paragraflar kaldırarak.
But fails! için:
- remove those empty paragraphs from which the style-attributes were removed.
Yani iki removeChild foreach döngüleri, birbiri ardına olması gerekir.
Third Attempt:
$html = new DOMDocument("1.0", "UTF-8");
$html->loadHTMLFile("HTML File with Empty Paragraphs.html");
$pars = $html->getElementsByTagName("p");
/* removeStyleAttribute foreach-loop */
foreach ($pars as $par) {
if ($par->hasAttribute("style")) {
$par->removeAttribute("style");
}
}
/* First removeChild foreach-loop */
foreach ($pars as $par) {
if ($par->textContent == "") {
$par->parentNode->removeChild($par);
}
}
/* Second removeChild foreach-loop, identical to the first removeChild foreach-loop */
foreach ($pars as $par) {
if ($par->textContent == "") {
$par->parentNode->removeChild($par);
}
}
$html->saveHTMLFile("HTML File WithOut Empty Paragraphs.html");
This works perfectly!, ama iki özdeş döngüler, sağ birbiri ardına olması garip.
Ben de her şey için tek bir döngü kullanmaya çalıştı.
Fourth Attempt:
$html = new DOMDocument("1.0", "UTF-8");
$html->loadHTMLFile("HTML File with Empty Paragraphs.html");
$pars = $html->getElementsByTagName("p");
foreach ($pars as $par) {
if ($par->textContent == "") {
if ($par->hasAttribute("style")){
$par->removeAttribute("style");
}
$par->parentNode->removeChild($par);
}
}
$html->saveHTMLFile("HTML File WithOut Empty Paragraphs.html");
This succeeds için:
- remove empty paragraphs without the style-attribute,
but fails için:
- o var boş paragraflardan stil özelliğini kaldırın.
- style özniteliği ile boş paragraflar kaldırın.