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] Peut-on modifier un xml en fonction d'un paramètre?


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 25
    Points : 30
    Points
    30
    Par défaut [XML] Peut-on modifier un xml en fonction d'un paramètre?
    Bonjour,

    J'ai un fichier xml contenant plusieurs tableau. J'aimerais pouvoir ajouter et modifier simplement des tableaux.
    Pour la modification, j'aimerais qu'elle s'opère en fonction d'un paramètre.

    Voici mon .xml :

    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
    25
    26
    27
    28
     
    <?xml version="1.0" encoding="UTF-8"?>
    <Boutique>
    	<Offres type="array">
    		<offre>
    			<id>1</id>
    			<titre>titre 1</titre>
    			<contenu>le 1er contenu</contenu>
    			<categorie_id>1</categorie_id>
    			<disponible>1</disponible>
    			<prix>le prix</prix>
    		</offre>
    		<offre>
    			<id>2</id>
    			<titre>titre 2 </titre>
    			<contenu>mon second contenu</contenu>
    			<categorie_id>1</categorie_id>
    			<disponible>1</disponible>
    			<prix>prix</prix>
    		</offre>
    	</Offres>
    	<Categories type="array">
    		<categorie>
    			<id>1</id>
    			<titre>titre categorie</titre>		
    		</categorie>
    	</Categories>
    </Boutique>
    J'aimerais par exemple, pouvoir modifier un des tableaux (offre ou catégorie) en ayant connaissance de l'id.
    Pour faire plus précis, j'aimerais faire une modification de toutes les caractéristique (prix, titre, contenu, ....) à la manière de UPDATE de mysql en fonction de l'id.

    Existe-t'il une fonction (ou class) prévu à cet effet?

    Pour la création, j'aimerais insérer des tableaux "offre" et "categorie" dans "Offres" et "Categories" sans avoir recours aux regex.

    J'ai regardé la doc, et j'avoue n'avoir rien compris, et php.net me renvoie que des erreurs 404 depuis hier, impossible de me renseigner de ce coté là :/


    Stevens,

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    J'aimerais par exemple, pouvoir modifier un des tableaux (offre ou catégorie) en ayant connaissance de l'id.
    C'est du XML, c'est pas des tableaux mais des nœuds et pour modifier tes nœuds il n'y a pas de class ou fonction pré-definies comme une BDD mais c'est à toi d'écrire le code pour manipuler le document...tuto pour manipuler le DOM :
    http://eusebius.developpez.com/php5dom/
    Développeur informatique contrarié...

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Merci pour la précision, ça va ptete me permettre d'affiner mes recherches.

    En lisant la doc (que j'avais déjà lu), plus précisément : http://eusebius.developpez.com/php5dom/#L4.2

    J'arrive à une fonction comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
       public function editXML($id, $data){
               $dom = new DomDocument();
               $dom->load('Cache/cacheBoutique.xml');
               $Offres = $dom->getElementsByTagName('offre');           
               foreach($Offres AS $offre){
                   if(intval($offre->getAttribute("id")) == intval($id)){
                       $offre->setAttribute('titre', $data->titre);
                       $offre->setAttribute('contenu', $data->contenu);
                       $offre->setAttribute('disponible', $data->disponible);
                       $offre->setAttribute('prix', $data->prix);
                   }
               }
       }
    $id correponds à l'id de l'offre, et $data est un objet contenant toutes les informations à modifier.

    Cependant, rien à faire. Je n'arrive pas à modifier..

  4. #4
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function editOffre($id, $data){
        $dom = new DomDocument();
        $dom->load('offre.xml');
    	$xp = new DomXPath($dom);
    	$offres = $dom->getElementsByTagName('Offres')->item(0);
    	$res = $xp->query("offre[@id = '".$id."']", $offres);
    	$res->item(0)->setAttribute('titre',$data->titre);
    	$res->item(0)->setAttribute('contenu', $data->contenu);
    	$res->item(0)->setAttribute('disponible', $data->disponible);
    	$res->item(0)->setAttribute('prix', $data->prix);
    	$dom->save('offre.xml');
    }
    xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?xml version="1.0" encoding="UTF-8"?>
    <Boutique>
    	<Offres type="array">
    		<offre id="1" titre="titre 1" contenu="contenu 1" categorie_id="1" disponible="1" prix="prix 1"/>
    		<offre id="2" titre="titre 2" contenu="contenu 2" categorie_id="1" disponible="1" prix="prix 2"/>
    	</Offres>
    	<Categories type="array">
    		<categorie id="1" titre="titre categorie"/>
    	</Categories>
    </Boutique>
    Développeur informatique contrarié...

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2012
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 25
    Points : 30
    Points
    30
    Par défaut
    Merci, j'avais pas pensé à cette manière d'écrire le xml.
    J'vais l'adopter pour tous mes autres xml.

    Je vais tester.

    Par contre va falloir que j'change toutes mes boucles pour lire le xml maintenant :/

    Encore merci

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

Discussions similaires

  1. valider un xml en fonction du xsd
    Par gentil dans le forum C#
    Réponses: 9
    Dernier message: 24/02/2008, 14h11
  2. [DOM] XML+XSL: JavaScript peut-il modifier le XML? ou le DOM?
    Par maskim dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/12/2007, 15h05
  3. [XSD] Validation d'un XML en fonction d'attributs
    Par Oliveuh dans le forum Valider
    Réponses: 2
    Dernier message: 04/06/2007, 12h25
  4. Programme de modification de XML en fonction de conditions
    Par greg2 dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 31/07/2006, 08h20
  5. [DOM XML] Erreur fonction load() d'un objet dom??
    Par ribrok dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 04/10/2005, 11h43

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