$root = $xml->createElementNS('myNS', 'root');
root
не должно быть в пространстве имен myNS
. В исходном примере это не пространство имен.
$x = $xml->createElementNS('myNS', 'x', 'test');
Установите квалифицированное имя p:x
вместо просто x
, чтобы предложить алгоритму сериализации, который вы хотите использовать p
в качестве префикса для этого пространства имен. Однако обратите внимание, что для читателя с поддержкой XML-пространства имен нет семантической разницы, используется p:
или нет.
Это приведет к выводу объявления xmlns:p
на элемент <p:x>
(первый, который нуждается в нем). Если вы хотите, чтобы объявление вместо этого находилось в корневом элементе (опять же, нет никакой разницы для считывателя XML-с-пространствами имен), вам придется явно setAttributeNS
. eg.:
$root = $xml->createElementNS(null, 'root');
$xml->appendChild($root);
$x = $xml->createElementNS('myNS', 'p:x', 'test');
$root->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:p', 'myNS');
$root->appendChild($x);