run code in 200+ php & hhvm versions
<?php $document = new DOMDocument(); $document->appendChild($document->createElement('foo')); // add attribute in namespace $document->documentElement->setAttributeNS('urn:foo', 'f:foo', 'bar'); echo $document->saveXML(); // fetch the namespace definition node $namespace = $document->documentElement->getAttributeNodeNS('http://www.w3.org/2000/xmlns/', 'f'); var_dump($namespace); // it should be an attribute node but isn't $document->documentElement->removeAttributeNode($namespace);
based on jNR9E
Output for 7.1.25 - 7.3.3
<?xml version="1.0"?> <foo xmlns:f="urn:foo" f:foo="bar"/> object(DOMNameSpaceNode)#3 (8) { ["nodeName"]=> string(7) "xmlns:f" ["nodeValue"]=> string(7) "urn:foo" ["nodeType"]=> int(18) ["prefix"]=> string(1) "f" ["localName"]=> string(1) "f" ["namespaceURI"]=> string(7) "urn:foo" ["ownerDocument"]=> string(22) "(object value omitted)" ["parentNode"]=> string(22) "(object value omitted)" } Fatal error: Uncaught TypeError: Argument 1 passed to DOMElement::removeAttributeNode() must be an instance of DOMAttr, instance of DOMNameSpaceNode given in /in/jkC5s:14 Stack trace: #0 /in/jkC5s(14): DOMElement->removeAttributeNode(Object(DOMNameSpaceNode)) #1 {main} thrown in /in/jkC5s on line 14
Process exited with code 255.