To avoid multiple xmlns re-declaration, make sure you appending ElementNS into actual DOMDocument tree (not into some currently-assembed derelict element).
(PHP 5, PHP 7, PHP 8)
DOMDocument::createElementNS — Crée un nouveau nœud avec un espace de noms associé
$namespace
, string $qualifiedName
, string $value
= ""): DOMElement|falseCette fonction crée un nouveau nœud avec un espace de noms associé. Ce nœud ne sera pas affiché dans le document, à moins qu'il ne soit inséré avec DOMNode::appendChild().
namespace
L'URI de l'espace de noms.
qualifiedName
Le nom qualifié de l'élément, en tant que préfixe:nomBalise
.
value
La valeur de l'élément. Par défaut, un élément vide sera créé. Vous pouvez également définir la valeur plus tard en utilisant la fonction DOMElement::$nodeValue.
Un nouveau DOMElement ou false
si une erreur survient.
DOM_INVALID_CHARACTER_ERR
Lancé si qualifiedName
contient un caractère invalide.
DOM_NAMESPACE_ERR
Lancé si qualifiedName
est un nom qualifié malformé.
Exemple #1 Création d'un nouvel élément et insertion en tant que racine
<?php
$dom = new DOMDocument('1.0', 'utf-8');
$element = $dom->createElementNS('http://www.example.com/XFoo', 'xfoo:test', 'Ceci est l\'élément racine !');
// Nous insérons le nouvel élément en tant que racine (fils du document)
$dom->appendChild($element);
echo $dom->saveXML();
?>
L'exemple ci-dessus va afficher :
<?xml version="1.0" encoding="iso-8859-1"?> <xfoo:test xmlns:xfoo="http://www.example.com/XFoo">Ceci est l'élément racine !</xfoo:test>
Exemple #2 Un exemple avec un espace de noms en préfixe
<?php
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
$root = $doc->createElementNS('http://www.w3.org/2005/Atom', 'element');
$doc->appendChild($root);
$root->setAttributeNS('http://www.w3.org/2000/xmlns/' ,'xmlns:g', 'http://base.google.com/ns/1.0');
$item = $doc->createElementNS('http://base.google.com/ns/1.0', 'g:item_type', 'house');
$root->appendChild($item);
echo $doc->saveXML(), "\n";
echo $item->namespaceURI, "\n"; // Affiche : http://base.google.com/ns/1.0
echo $item->prefix, "\n"; // Affiche : g
echo $item->localName, "\n"; // Affiche : item_type
?>
L'exemple ci-dessus va afficher :
<?xml version="1.0" encoding="utf-8"?> <element xmlns="http://www.w3.org/2005/Atom" xmlns:g="http://base.google.com/ns/1.0"> <g:item_type>house</g:item_type> </element> http://base.google.com/ns/1.0 g item_type