What I tried and what doesn't work:
Input:
$d = new DOMDocument(); $d->formatOutput = true; // Out of my control: $someEl = $d->createElementNS('http://example.com/a', 'a:some'); // Under my control: $envelopeEl = $d->createElementNS('http://example.com/default', 'envelope'); $d->appendChild($envelopeEl); $envelopeEl->appendChild($someEl); echo $d->saveXML(); $someEl->prefix = null; echo $d->saveXML();
Output is invalid XML after substitution:
<?xml version="1.0"?> <envelope xmlns="http://example.com/default"> <a:some xmlns:a="http://example.com/a"/> </envelope> <?xml version="1.0"?> <envelope xmlns="http://example.com/default"> <:some xmlns:a="http://example.com/a" xmlns:="http://example.com/a"/> </envelope>
Note that <a:some>
may have children. One solution would be
to create a new <some>
, and copy all children from <a:some>
to <some>
. Is
that the way to go?