|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
PatchesPull Requests
Pull requests:
HistoryAllCommentsChangesGit/SVN commits
[2024-03-09 16:09 UTC] nielsdos@php.net
[2024-03-09 16:09 UTC] nielsdos@php.net
-Status: Open
+Status: Closed
-Assigned To:
+Assigned To: nielsdos
[2024-03-09 16:09 UTC] nielsdos@php.net
|
|||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 08:00:02 2025 UTC |
Description: ------------ DOMElement#setAttribute() correctly handles setting the default (unprefixed) namespace, but does not handle prefixed namespaces, and simply creates a DOMAttr and appends it to the node. Test script: --------------- $xml = '<?xml version="1.0" ?><test />'; $doc = new DOMDocument(); $doc->loadXML($xml); $element = $doc->documentElement; // Unprefixed works fine echo "\nElement should not have namespace:\n"; var_dump($element->lookupPrefix('test:unprefixed'), $element->lookupNamespaceURI(null)); echo "\nsetAttribute() call should succeed:\n"; var_dump($element->setAttribute('xmlns', 'test:unprefixed')); echo "\nElement should have xmlns attribute:\n"; var_dump($element->hasAttribute('xmlns')); echo "\nElement should have namespace:\n"; var_dump($element->lookupPrefix('test:unprefixed'), $element->lookupNamespaceURI(null)); // Prefixed does not work echo "\nElement should not have namespace:\n"; var_dump($element->lookupPrefix('test:prefixed'), $element->lookupNamespaceURI('test')); echo "\nsetAttribute() call should succeed:\n"; var_dump($element->setAttribute('xmlns:test', 'test:prefixed')); echo "\nElement should have xmlns attribute:\n"; var_dump($element->hasAttribute('xmlns:test')); echo "\nElement should have namespace:\n"; var_dump($element->lookupPrefix('test:prefixed'), $element->lookupNamespaceURI('test')); Expected result: ---------------- Namespace is registered with prefix Actual result: -------------- DOMAttr is added to node but namespace is not registered