Bug #47531 [Opn->Asn]: No way of removing redundant xmlns: declarations
| From: | felipe@php.net | Date: | Sun, 20 Jun 2010 19:31:54 +0000 |
| Subject: | Bug #47531 [Opn->Asn]: No way of removing redundant xmlns: declarations | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-151674@lists.php.net to get a copy of this message | ||
Edit report at http://bugs.php.net/bug.php?id=47531&edit=1
ID: 47531
Updated by: felipe@php.net
Reported by: sgunderson at bigfoot dot com
Summary: No way of removing redundant xmlns: declarations
-Status: Open
+Status: Assigned
Type: Bug
Package: DOM XML related
Operating System: Debian
PHP Version: 5.3CVS-2009-02-28 (snap)
-Assigned To:
+Assigned To: rrichards
Previous Comments:
------------------------------------------------------------------------
[2009-06-14 19:06:43] robin2009 at altruists dot org
You can run DOMs through an XSLT identity transform to strip redundant
namespaces, since this removes (what it deems to be) unused namespaces
(i.e. namespaces which don't appear as elements or attributes).
This method is not only slow for large DOMs, if you're working with XSDs
or XSLTs, both of which use namespaces inside attribute values, it would
need modification, since XSLT strips them.
------------------------------------------------------------------------
[2009-02-28 15:19:14] sgunderson at bigfoot dot com
Description:
------------
There seems to be no good way of manipulating XML namespace declarations
at all. In particular, they never get garbage collected in any way, and
you cannot remove them manually, so they will stick around forever
unless you create a new one. My typical use case is shown in the
reproduce code below (although the element will typically have child
elements).
Since 5.3 (bug #38949) it seems I can getAttribute() the xmlns element,
but still not remove it it any reasonable way (and it should really just
disappear by itself; it does in other languages).
Reproduce code:
---------------
<?php
$doc = new DOMDocument;
$doc->loadXML('<html xmlns="something"><element
xmlns:ns="whatever"
ns:foo="bar" /></html>');
$root = $doc->documentElement;
$elem = $root->firstChild;
$elem->removeAttributeNode($elem->attributes->item(0));
print $doc->saveXML();
?>
Expected result:
----------------
<?xml version="1.0"?>
<html xmlns="something"><element/></html>
Actual result:
--------------
<?xml version="1.0"?>
<html xmlns="something"><element xmlns:ns="whatever"/></html>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/bug.php?id=47531&edit=1