HEX
Server: nginx/1.24.0
System: Linux localhost 5.15.0-46-generic #49-Ubuntu SMP Thu Aug 4 18:03:25 UTC 2022 x86_64
User: www (1000)
PHP: 8.3.27
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/php/83/src/ext/dom/tests/DOMNode_removeChild_basic.phpt
--TEST--
DOM removeChild : Basic Functionality
--EXTENSIONS--
dom
--CREDITS--
Simon Hughes <odbc3@hotmail.com>
--FILE--
<?php

$xml = <<< EOXML
<?xml version="1.0" encoding="ISO-8859-1"?>
<courses>
    <course title="one">
        <notes>
            <note>c1n1</note>
            <note>c1n2</note>
        </notes>
    </course>
    <course title="two">
        <notes>
            <note>c2n1</note>
            <note>c2n2</note>
        </notes>
    </course>
</courses>
EOXML;

function dumpcourse($current) {
    $title = ($current->nodeType != XML_TEXT_NODE && $current->hasAttribute('title')) ? $current->getAttribute('title'):"no title";
    echo "Course: $title:";echo get_class($current), "\n";
    echo "~";var_dump($current->textContent);
}

$dom = new DOMDocument();
$dom->loadXML($xml);
$root = $dom->documentElement;

$children = $root->childNodes;
$len = $children->length;
echo "original has $len nodes\n";
for ($index = $children->length - 1; $index >=0; $index--) {
    echo "node $index\n";
    $current = $children->item($index);
    dumpcourse($current);
    if ($current->nodeType == XML_TEXT_NODE) {
        $noderemoved = $root->removeChild($current);
    }
}
$children = $root->childNodes;
$len = $children->length;
echo "after text removed it now has $len nodes\n";
for ($index = 0; $index < $children->length; $index++) {
    echo "node $index\n";
    $current = $children->item($index);
    dumpcourse($current);
}
?>
--EXPECT--
original has 5 nodes
node 4
Course: no title:DOMText
~string(1) "
"
node 3
Course: two:DOMElement
~string(57) "
        
            c2n1
            c2n2
        
    "
node 2
Course: no title:DOMText
~string(5) "
    "
node 1
Course: one:DOMElement
~string(57) "
        
            c1n1
            c1n2
        
    "
node 0
Course: no title:DOMText
~string(5) "
    "
after text removed it now has 2 nodes
node 0
Course: one:DOMElement
~string(57) "
        
            c1n1
            c1n2
        
    "
node 1
Course: two:DOMElement
~string(57) "
        
            c2n1
            c2n2
        
    "