Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOM
DOM Forum d'entraide pour l'extension DOM permettant de manipuler des documents XML en PHP 5 (approche DOM). Avant de poster -> tutoriels DOM
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/05/2007, 17h28   #1
Membre Expert
 
Avatar de alain.couthures
 
Inscription : avril 2007
Messages : 889
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 889
Points : 1 061
Points : 1 061
Par défaut [DOM] saveXML et les namespaces

Bonjour,

J'effectue un portage de PHP4 en PHP5 et je bloque sur les namespaces (je sais, rien d'original...).

Je dois appliquer une transformation sur un sous-arbre et le problème est que la méthode saveXML() me retourne le sous-arbre sous forme de chaine de caractères mais sans les déclarations des namespaces qui y sont utilisés : pas de xmlns:prefix="" !!! En conséquence de quoi, je ne peux pas charger le sous-arbre en tant que document.

En PHP4, la fonction dump_node() avait le même souci mais la fonction add_namespace() me permettait d'ajouter les namespaces que je connais par ailleurs.

Y-a-t'il une autre solution que de partir dans le tripatouillage avec des expressions régulières ???

Merci de vos réponses

Quelques bouts de code...

Sous-arbre retourné par saveXML() :
Code :
<txs:args><txs:arg><![CDATA[loadsave.txs]]></txs:arg></txs:args>
PHP5 en erreur :
Code :
1
2
   $xml = new DOMDocument();
   $xml->loadXML($n->ownerDocument->saveXML($n->firstChild));
PHP4 qui marche:
Code :
1
2
3
4
   $xDoc = $n->owner_document();
   $node = $n->first_child();
   $node->add_namespace("http://sourceforge.net/projects/txs", "txs");
   $xml = $xDoc->dump_node($node);
__________________
Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/
alain.couthures est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/05/2007, 17h44   #2
Membre Expert
 
Avatar de alain.couthures
 
Inscription : avril 2007
Messages : 889
Détails du profil
Informations personnelles :
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : avril 2007
Messages : 889
Points : 1 061
Points : 1 061
Et voilà !

Il suffit de rajouter le xmlns:prefix comme un vulgaire attribut ! (N'est-ce pas un peu "cavalier" ?)
Code :
1
2
3
4
5
   $xml = new DOMDocument();
   $nstxs = $n->ownerDocument->createAttribute("xmlns:txs");
   $nstxs->appendChild($n->ownerDocument->createTextNode("http://sourceforge.net/projects/txs"));
   $n->firstChild->appendChild($nstxs);
   $xml->loadXML($n->ownerDocument->saveXML($n->firstChild));
La méthode saveXML de PHP5 n'est pas encore au niveau de la propriété innerXML de .Net...
__________________
Formulaires XForms sur tous navigateurs sans extension à installer (architecture XRX) : http://www.agencexml.com/xsltforms/
alain.couthures est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h27.


 
 
 
 
Partenaires

Hébergement Web