Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 14h30   #1
JStevens
Futur Membre du Club
 
Homme Stevens
Inscription : janvier 2012
Messages : 25
Détails du profil
Informations personnelles :
Nom : Homme Stevens
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 25
Points : 17
Points : 17
Par défaut 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 :
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,
JStevens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 14h55   #2
vorace
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 594
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 : 594
Points : 906
Points : 906
Citation:
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 15h43   #3
JStevens
Futur Membre du Club
 
Homme Stevens
Inscription : janvier 2012
Messages : 25
Détails du profil
Informations personnelles :
Nom : Homme Stevens
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 25
Points : 17
Points : 17
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 :
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..
JStevens est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 17h17   #4
vorace
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 594
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 : 594
Points : 906
Points : 906
php
Code :
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 :
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/01/2012, 18h19   #5
JStevens
Futur Membre du Club
 
Homme Stevens
Inscription : janvier 2012
Messages : 25
Détails du profil
Informations personnelles :
Nom : Homme Stevens
Localisation : France

Informations forums :
Inscription : janvier 2012
Messages : 25
Points : 17
Points : 17
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
JStevens est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


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


 
 
 
 
Partenaires

Hébergement Web