Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML
XML Forum d'entraide sur XML avec PHP. Exemples : SimpleXML, OpenXML... Avant de poster -> FAQ XML, Cours XML et Sources XML
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 22/11/2010, 13h03   #1
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
Par défaut Ajouter un node et ses enfants dans un fichier xml existant

Bonjour, j'ai un xml qui prend la forme suivante:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
<racine>
    <utilisateur id='truc'>(unique)
          <date date='ladate'>(unique)
                <picture>
                      <lien>lelien</lien>
                      <nom>lenom</nom>
                      <taille>lataille</taille>
                </picture>
                <picture>
                      <lien>lelien2</lien>
                      <nom>lenom2</nom>
                      <taille>lataille2</taille>
                </picture>
                <picture>
                      <lien>lelien3</lien>
                      <nom>lenom3</nom>
                      <taille>lataille3</taille>
                </picture>
          </date>
    </utilisateur>
</racine>
Seul l'élément picture existe en plusieurs exemplaires, je voudrais pouvoir rajouter des elements picture, avec leurs données enfant, en php.

J'ai testé avec simplexml mais ça fait jamais exactement ce que je veux, ça met le bazar dans mon fichier xml (j'imagine que je m'y prends mal...).

Quelqu'un aurait un petit exemple de script adapté à mon cas particulier (mais qui doit être assez courant j'imagine?) avec simplexml ou dom document ou autre, pourvu que ce soit du php?
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2010, 20h12   #2
Expert Confirmé
 
Avatar de Séb.
 
Inscription : mars 2005
Messages : 2 815
Détails du profil
Informations personnelles :
Âge : 34
Localisation : France

Informations professionnelles :
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mars 2005
Messages : 2 815
Points : 3 440
Points : 3 440
Citation:
J'ai testé avec simplexml mais ça fait jamais exactement ce que je veux, ça met le bazar dans mon fichier xml (j'imagine que je m'y prends mal...).
C'est-à-dire ?
Donne-nous ton script à corriger.
__________________
Un problème exposé clairement est déjà à moitié résolu
Keep It Smart and Simple
Séb. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h05   #3
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
Ok pas de souci, c'est juste que j'aime pas trop mettre les scripts du travail sur le net, je le supprimerai quand ce sera résolu alors (ou remplacerait les mots cles même si concretement ça risque rien, histoire que ça reste exploitable vu que c'est un cas assez générique finalement)

J'ai effacé mon script simple xml, mais j'ai testé avec dom:

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
 
$dom = new DomDocument();
					$dom->load($folder."picasa_user".$user_id.".xml");
					$xpath = new Domxpath($dom);
					$root = $dom->getElementsByTagName('picasa')->item(0);
					$infos = $xpath->query('//picasa');
					foreach($infos as $info){
					debug("foreach passe bien ! !");
						$user= $info->getElementsByTagName('user_id')->item(0);
						$date= $user->getElementsByTagName('date')->item(0);
 
						$picture = $date->createElement ("picture");
						$date->appendChild($picture);
						$url 	 = $picture->createElement ("url",$pic_datas['picasaPhotoLink']);
						$pic_id = $picture->createElement ("pic_id", $pic_datas['picasaPicId']);
						$title = $picture->createElement ("title", $pic_datas['title']);
						$description = $picture->createElement ("description", $pic_datas['description']);
 
						$picture->appendChild($url);
						$picture->appendChild($pic_id);
						$picture->appendChild($title);
						$picture->appendChild($description);
					}
					$dom->save($folder."picasa_user".$user_id.".xml");
Les chemins de fichier xml sont corrects, les variables "$pic_datas" aussi... mais ça me met "call to undefined function "createElement"....
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h51   #4
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 134
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 134
Points : 2 877
Points : 2 877
createElement est une méthode de DomDocument et non de DomElement.
Code :
1
2
3
 
$picture = $dom->createElement('picture');
$date->appendChild($picture);
http://fr.php.net/manual/fr/domdocum...ateelement.php
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 11h58   #5
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
ahhh! Merci ! quelle andouille, je pouvais chercher longtemps Je vais essayer autrement alors...
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h01   #6
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
Quoi que j'ai parlé trop vite, c'est bien domDocument que j'utilise non?
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h06   #7
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
J'ai du mal à comprendre, j'utilise createelement, qui est une méthode de domDocument... il ne devrait pas y avoir de problème si?
zoreol est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h25   #8
Modérateur
 
Avatar de ThomasR
 
Homme Thomas Rambaud
Développeur Web
Inscription : décembre 2007
Messages : 2 134
Détails du profil
Informations personnelles :
Nom : Homme Thomas Rambaud
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : décembre 2007
Messages : 2 134
Points : 2 877
Points : 2 877
C'est une méthode de DOmDocument, pas de DomElement, toi tu l'appelles sur un objet de type DomElement.

je t'ai donné le code corrigé :
Code :
1
2
3
 
$picture = $dom->createElement('picture');
$date->appendChild($picture);
__________________
Développeur Web, accessoirement geek (ou l'inverse)
http://thomasrambaud.com
ThomasR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2010, 12h50   #9
Nouveau Membre du Club
 
Inscription : septembre 2010
Messages : 61
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 61
Points : 37
Points : 37
Oki j'ai compris, merci bien, ça marche nickel maintenant:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
$dom = new DomDocument;
					$dom->Load($folder."picasa_user".$user_id.".xml");
					$date = $dom->getElementsByTagName('date')->item(0);
					$picture = $dom ->createElement('picture');
					$date->appendChild($picture);
 
					$url = $dom ->createElement('url', $pic_datas['picasaPhotoLink']);
					$pic_id = $dom ->createElement('pic_id',$pic_datas['picasaPicId']);
					$title = $dom ->createElement('title', $pic_datas['title']);
					$description = $dom ->createElement('description', $pic_datas['description']);
 
					$picture->appendChild($url);
					$picture->appendChild($pic_id);
					$picture->appendChild($title);
					$picture->appendChild($description);
 
					$test = $dom->save($folder."picasa_user".$user_id.".xml");
zoreol 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 04h06.


 
 
 
 
Partenaires

Hébergement Web