PHP, neden ben sadece stil özniteliği kaldırılır hangi bir DOMNode iki kez removeChild yöntemi uygulamak gerekiyor?

0 Cevap php

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.

0 Cevap