ID: 36756 User updated by: olaf at 7val dot com Reported By: olaf at 7val dot com -Status: Bogus +Status: Open Bug Type: DOM XML related Operating System: Linux PHP Version: 5.1.2 New Comment:
I double checked documentation, node corruption is not mentioned there. if the return value of removeChild is assigned to a variable, everything works as expected: -----------------8<--------------- $dom = DOMDocument::loadXML('<root><child/></root>'); $xpath = new DOMXpath($dom); $node = $xpath->query('//child')->item(0); echo $node->nodeName . "\n"; $res = $GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; echo "nodeName: " .$node->nodeName . "\n"; echo "parentNode: " .$node->parentNode . "\n"; ---------------->8-------------------- if the return value is ignored: ----------------------------8<--------------- $dom = DOMDocument::loadXML('<root><child/></root>'); $xpath = new DOMXpath($dom); $node = $xpath->query('//child')->item(0); echo $node->nodeName . "\n"; $GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; echo "nodeName: " .$node->nodeName . "\n"; echo "parentNode: " .$node->parentNode . "\n"; -------------------------->8------------ or goes out of scope: --------------------8<----------- $dom = DOMDocument::loadXML('<root><child/></root>'); $xpath = new DOMXpath($dom); $node = $xpath->query('/root/child')->item(0); echo $node->nodeName; function test() { $x = $GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); } test(); echo $node->nodeName; -------------------->8----------- $node gets corrupted. Previous Comments: ------------------------------------------------------------------------ [2006-03-16 11:20:57] [EMAIL PROTECTED] Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php ------------------------------------------------------------------------ [2006-03-16 09:47:53] olaf at 7val dot com Description: ------------ Using DOMDocument::removeChild corrupts node in the document in some cases. Given a node $node and removing a parent node of this node renders $node unusable (properties are gone, but $node is still of class DOMElement). Reproduce code: --------------- <?php // This works as expected $dom = DOMDocument::loadXML('<root><child/></root>'); $xpath = new DOMXpath($dom); $node = $xpath->query('/root')->item(0); echo $node->nodeName . "\n"; $dom->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; echo "nodeName: " .$node->nodeName . "\n"; echo "parentNode: " .$node->parentNode . "\n"; // This breaks "$node" $dom = DOMDocument::loadXML('<root><child/></root>'); $xpath = new DOMXpath($dom); $node = $xpath->query('//child')->item(0); echo $node->nodeName . "\n"; $GLOBALS['dom']->removeChild($GLOBALS['dom']->firstChild); echo "nodeType: " . $node->nodeType . "\n"; echo "nodeName: " .$node->nodeName . "\n"; echo "parentNode: " .$node->parentNode . "\n"; echo "\n"; ?> Expected result: ---------------- Properties of $node should still exists, see part1: root nodeType: 1 nodeName: root parentNode: Actual result: -------------- Properties are gone child Notice: Undefined property: DOMElement::$nodeType in /home/olaf/test/test.php on line 20 nodeType: Notice: Undefined property: DOMElement::$nodeName in /home/olaf/test/test.php on line 21 nodeName: Notice: Undefined property: DOMElement::$parentNode in /home/olaf/test/test.php on line 22 parentNode: ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=36756&edit=1