IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[XML] Ajouter un node et ses enfants dans un fichier xml existant


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut [XML] Ajouter un node et ses enfants dans un fichier xml existant
    Bonjour, j'ai un xml qui prend la forme suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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"....

  4. #4
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    createElement est une méthode de DomDocument et non de DomElement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $picture = $dom->createElement('picture');
    $date->appendChild($picture);
    http://fr.php.net/manual/fr/domdocum...ateelement.php

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    ahhh! Merci ! quelle andouille, je pouvais chercher longtemps Je vais essayer autrement alors...

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Quoi que j'ai parlé trop vite, c'est bien domDocument que j'utilise non?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    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?

  8. #8
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $picture = $dom->createElement('picture');
    $date->appendChild($picture);

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 69
    Points : 67
    Points
    67
    Par défaut
    Oki j'ai compris, merci bien, ça marche nickel maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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");

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 21/04/2015, 13h39
  2. Réponses: 1
    Dernier message: 24/01/2015, 21h39
  3. Ajouter des objets dans un fichier deja existant
    Par schine dans le forum Persistance des données
    Réponses: 1
    Dernier message: 31/01/2013, 01h42
  4. [1.x] Ajout des paramétres d'un formulaire dans un fichier excel
    Par farhaenis dans le forum Symfony
    Réponses: 0
    Dernier message: 02/08/2011, 09h51
  5. Réponses: 4
    Dernier message: 14/05/2007, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo