#43221 [Asn->Csd]: SimpleXML adding default namespace in addAttribute

From: Date: Mon, 12 Nov 2007 19:04:27 +0000
Subject: #43221 [Asn->Csd]: SimpleXML adding default namespace in addAttribute
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-119568@lists.php.net to get a copy of this message
ID: 43221 Updated by: rrichards@php.net Reported By: jevon at jevon dot org -Status: Assigned +Status: Closed Bug Type: SimpleXML related Operating System: Windows XP PHP Version: 5.2.4 Assigned To: rrichards New Comment: This bug has been fixed in CVS. Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/. Thank you for the report, and for helping us make PHP better. Note that all the examples here will now cause a warning due to trying to create invalid XML. Previous Comments: ------------------------------------------------------------------------ [2007-11-12 15:10:46] rrichards@php.net updated summary. The bug is that an unprefixed attribute is being allowed to be created with a namespace and a default namespace is being added to the parent element. ------------------------------------------------------------------------ [2007-11-12 14:41:16] hubert dot roksor at gmail dot com It works just fine if you define your namespace beforehand. $xml = new SimpleXMLElement('<root xmlns:bar="http://bar.com"/>'); $n = $xml->addChild("node", "value"); $n->addAttribute("a", "b"); $n->addAttribute("c", "d", "http://bar.com"); print_r($xml->asXml()); I don't know, perhaps SimpleXML should raise a E_NOTICE on unknown namespace, but it's really a matter of good coding practice. Btw, jevon, I don't recommend saying that something is "screwy" when filing bug reports, it doesn't really motivate developpers of said software to look into them ^^; ------------------------------------------------------------------------ [2007-11-12 09:55:18] tony2001@php.net Rob, could you take a look at it plz? ------------------------------------------------------------------------ [2007-11-09 02:48:17] jevon at jevon dot org Description: ------------ Namespace support in SimpleXML is all screwy. In particular, you cannot add two differently-namespaced attributes to a SimpleXML node; the first one is lost. Reproduce code: --------------- $xml = new SimpleXMLElement('<root />'); $n = $xml->addChild("node", "value"); // still fails even if we set a NS here $n->addAttribute("a", "b"); // still fails even if we set a different NS here $n->addAttribute("c", "d", "http://bar.com"); print_r($xml->asXml()); Expected result: ---------------- <root xmlns:a="http://bar.com"><node a="b" a:c="d">value</node></root> Actual result: -------------- <root><node xmlns="http://bar.com" a="b" c="d">value</node></root> ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=43221&edit=1

« previous php.bugs (#119568) next »