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 08/09/2008, 16h36   #1
Membre à l'essai
 
Homme
Étudiant
Inscription : mai 2007
Messages : 76
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : mai 2007
Messages : 76
Points : 23
Points : 23
Par défaut Soucis avec CloneNode() et ChildNodes()

Bonjour a toutes et a tous, j'ai une petite question concernant le déplacement d'un noeud.

En effet j'aimerais pouvoir modifier mon fichier XML qui est le suivant:

Voici mon fichier:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="178.73px" height="145.518px" viewBox="0 0 178.73 145.518" enable-background="new 0 0 178.73 145.518" xml:space="preserve">
 
	<g id="stripe1">
		<line x1="0" y1="0" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe2">
		<line x1="20" y1="20" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe3">
		<line x1="40" y1="40" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe4"/>

Et voilà le résultat que j'aimerais obtenir:


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" width="178.73px" height="145.518px" viewBox="0 0 178.73 145.518" enable-background="new 0 0 178.73 145.518" xml:space="preserve">
 
	<g id="stripe1">
		<line x1="0" y1="0" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe2">
		<line x1="40" y1="40" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe3">
		<line x1="20" y1="20" x2="90" y2="100" fill="none" stroke="#000000" stroke-width="5"/>
	</g>
	<g id="stripe4"/>

Donc en fait j'ai modifier mon fichier en échangeant les fils de me "stripe2" et "stripe3"


Alors j'utilise le "stripe4" comme moyen de transition. Je fais un Clone de ma "stripe3" et ainsi je pourrais faire un replaceChild entre la "stripe2" et la "stripe3".

Voilà comment je precede dans mon fichier php:

Code :
1
2
3
4
5
6
7
8
9
10
	$dom = new DomDocument;
	$dom->load("monSVG.svg");
 
	$elem = $dom->getElementsByTagName(g)->item(1);
	$child = $elem->childNodes();
 
	$stripe5 = $dom->getElementsByTagName(g)->item(4);
	$stripe5->appendChild($child->cloneNode(true));
 
	$dom->save('monSVG.svg');
Je doit surement faire erreur car ce la ne fonctionne pas. Est ce que quelqu'un aurait une petite astuce pour m'aider sur ce coup là svp?

Ou si un autre moyen existe afin que je puisse arriver a mes fins ^^

Je suis preneur de tous commentaires !


Merci a tous de m'avoir lu et bonne journée à vous !
dedepsg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/09/2008, 23h26   #2
Invité de passage
 
Inscription : septembre 2007
Messages : 3
Détails du profil
Informations forums :
Inscription : septembre 2007
Messages : 3
Points : 3
Points : 3
Salut,
Je pense que le code n'est pas totalement complet, mais pourquoi pas utiliser remplaceChild à la place de clone ? donc voici un code avec une petit fonction qui pourrait peut etre t'aider :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
function transfert($id_1,$id_2){
	$dom=new DomDocument;
	$dom=load("nom.xml");
 
	$tag_1=false;
	$tag_2=false;
 
 
	if($dom->getElementById($id_1)){ // récupération du premier noeud
		$tag_1=true;
		$element_1=$dom->getElementById($id_1);
	}
	if($dom->getElementById($id_2)){ // récupération du deuxieme noeud
		$tag_2=true;
		$element_2=$dom->getElementById($id_2);
	}
// Il faut que les deux noeuds soient trouvé pour pratiquer le remplacement 
	if($tag_1 and $tag_2){ // Si tag_1 et tag_2 sont bien égale a true 
 
// C est peut etre cette partie qui est a changer car peut etre pas tres exact 
                $tmp=$element_1;
		$element_1->replaceChild($element_2,$element_1);
		$element_2->replaceChild($tmp,$element_2);
	}
}
Sinon pour ton code, dans le ->getElementsByTagName(g)-> essaye peut etre ->getElementsByTagName("g")-> .
Iliade est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h19.


 
 
 
 
Partenaires

Hébergement Web