Update de fichier XML via php
Résolu/Fermé
Alexandre Carle
-
12 mars 2008 à 15:02
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 5 janv. 2009 à 09:27
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 5 janv. 2009 à 09:27
A voir également:
- Update de fichier XML via php
- Fichier rar - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Ouvrir fichier .bin - Guide
- Xml download - Télécharger - Édition & Programmation
5 réponses
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
12 mars 2008 à 15:11
12 mars 2008 à 15:11
salut,
avec 'Document->createElement()' ou 'Document->createTextNode()' selon le besoin.
regarde ce tuto.
avec 'Document->createElement()' ou 'Document->createTextNode()' selon le besoin.
regarde ce tuto.
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
12 mars 2008 à 16:10
12 mars 2008 à 16:10
oups, non c'est moi qui me suis enflammé !
comme tu t'es tourné vers le DOM j'en ai déduit trop vite que tu voulais ajouter des nœuds…
et 'Element->setAttribute( 'name' , 'value' )' suivi d'un 'Document->save( 'file.xml' )' doit le faire.
il faut bien sélectionné le nœud.
as-tu essayé avec 'DOMXPath->query()' pour choper le nœud visé ?
comme tu t'es tourné vers le DOM j'en ai déduit trop vite que tu voulais ajouter des nœuds…
et 'Element->setAttribute( 'name' , 'value' )' suivi d'un 'Document->save( 'file.xml' )' doit le faire.
il faut bien sélectionné le nœud.
as-tu essayé avec 'DOMXPath->query()' pour choper le nœud visé ?
J'ai essayé de faire fonctionner le setAttribute à toutes les sauces et j'obtiens toujours le même message d'erreur :
Fatal error: Call to a member function saveAttribute() on a non-object in D:\domains\globe-technologies.com\wwwroot\alex\LGD\test.php on line 8
Voici le code source (un test en réalité, simplement pour réussir cerner comment mettre à jour) :
Note 1 : essentiellement, ici je restreint ma mise à jour au premier profil, celui ayant l'ID 0. Évidemment, j'ai vérifié qu'il y avait une ID 0 et que le if passait.
Note 2 : aucun doute possible pour le nom du node.
Bref, mes noms sont les bons, les chemins d'accès sont aussi les bons et il n'y a pas d'erreur de syntaxe. Donc forcément, il y a un truc que je ne pige pas, ou que je comprends mal ...
Fatal error: Call to a member function saveAttribute() on a non-object in D:\domains\globe-technologies.com\wwwroot\alex\LGD\test.php on line 8
Voici le code source (un test en réalité, simplement pour réussir cerner comment mettre à jour) :
<?php $xmlDoc = new DOMDocument(); $xmlDoc->load("XML/profils.xml"); $xml = $xmlDoc->documentElement; foreach($xml->childNodes as $profils){ if($profil->firstChild->nodeValue == 0){ // Note 1 $profil->setAttribute("id", 10); // Note 2 $xmlDoc->save("XML/profils.xml"); } break; } ?>
Note 1 : essentiellement, ici je restreint ma mise à jour au premier profil, celui ayant l'ID 0. Évidemment, j'ai vérifié qu'il y avait une ID 0 et que le if passait.
Note 2 : aucun doute possible pour le nom du node.
Bref, mes noms sont les bons, les chemins d'accès sont aussi les bons et il n'y a pas d'erreur de syntaxe. Donc forcément, il y a un truc que je ne pige pas, ou que je comprends mal ...
Ah aussi, ça :
C'est le mauvais message d'erreur (enfin, remplacer "save" par "set" et c'est le bon), j'ai copié d'une autre fenêtre où j'avais essayé un nom de fonction que je savais inexistant, juste pour voir s'il affichait le même message d'erreur. Comme c'est le cas, je me dis que c'est peut-être une mauvaise syntaxe ? D'une version php à l'autre ça change beaucoup pour le DOM XML. Cela dit, pour le 5.0+ comme c'est mon cas, c'est généralement ce format qui est utilisé ...
Fatal error: Call to a member function saveAttribute() on a non-object in D:\domains\globe-technologies.com\wwwroot\alex\LGD\test.php on line 8
C'est le mauvais message d'erreur (enfin, remplacer "save" par "set" et c'est le bon), j'ai copié d'une autre fenêtre où j'avais essayé un nom de fonction que je savais inexistant, juste pour voir s'il affichait le même message d'erreur. Comme c'est le cas, je me dis que c'est peut-être une mauvaise syntaxe ? D'une version php à l'autre ça change beaucoup pour le DOM XML. Cela dit, pour le 5.0+ comme c'est mon cas, c'est généralement ce format qui est utilisé ...
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
13 mars 2008 à 09:39
13 mars 2008 à 09:39
salut,
en plus tu devrais tester avec le type et sur une chaine.
foreach($xml->childNodes as $profils){ if($profil->firstChild->nodeValue == 0){ // il sort d'où profil ? au dessus c'est $profils $profil->setAttribute("id", 10); $xmlDoc->save("XML/profils.xml"); }
en plus tu devrais tester avec le type et sur une chaine.
$profil->firstChild->nodeValue === '0'
Et meeerde. C'était qu'une erreur de syntaxe. 'Faut que je me souvienne de celle-là -_-
Sinon, il suffit d'un simple :
... pour modifier le document.
La fonction setAttribute fonctionne très bien, seulement ça donne plutôt <profil id="10">, ce qui n'est pas tout à fait le résultat escompté.
Dans tous les cas, merci beaucoup pour l'aide Mathieu/Dalida. C'est très apprécié =)
- Alex, un peu honteux ^^"
Sinon, il suffit d'un simple :
$profils->firstChild->nodeValue = 10; $xmlDoc->save("XML/profils.xml");
... pour modifier le document.
La fonction setAttribute fonctionne très bien, seulement ça donne plutôt <profil id="10">, ce qui n'est pas tout à fait le résultat escompté.
Dans tous les cas, merci beaucoup pour l'aide Mathieu/Dalida. C'est très apprécié =)
- Alex, un peu honteux ^^"
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
>
Alexandre Carle
14 mars 2008 à 10:17
14 mars 2008 à 10:17
bon courage pour la suite !
-;o)
à plus !
-;o)
à plus !
bonjour ,
je survolais le forum et ton identité m'a interpelée car j'ai connu 1 ami militaire
se nommant pareil mais perdu de vu il y a klk années !!! il serait partit travaillé avec les ONG, serais tu cette personne ? sinon je ne suis pas tres technique en informatique donc je suis désolée de ne pouvoir t'aider.....disolée.....a bientot
je survolais le forum et ton identité m'a interpelée car j'ai connu 1 ami militaire
se nommant pareil mais perdu de vu il y a klk années !!! il serait partit travaillé avec les ONG, serais tu cette personne ? sinon je ne suis pas tres technique en informatique donc je suis désolée de ne pouvoir t'aider.....disolée.....a bientot
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
bonjour ,
je survolais le forum et ton identité m'a interpelée car j'ai connu 1 ami militaire
se nommant pareil mais perdu de vu il y a klk années !!! il serait partit travaillé avec les ONG, serais tu cette personne ? sinon je ne suis pas tres technique en informatique donc je suis désolée de ne pouvoir t'aider.....disolée.....a bientot
je survolais le forum et ton identité m'a interpelée car j'ai connu 1 ami militaire
se nommant pareil mais perdu de vu il y a klk années !!! il serait partit travaillé avec les ONG, serais tu cette personne ? sinon je ne suis pas tres technique en informatique donc je suis désolée de ne pouvoir t'aider.....disolée.....a bientot
Dalida
Messages postés
6728
Date d'inscription
mardi 14 mai 2002
Statut
Contributeur
Dernière intervention
11 janvier 2016
922
5 janv. 2009 à 09:27
5 janv. 2009 à 09:27
salut,
je rêve…
tu t'es loupé, on est pas sur Copains d'Avant !
si tu veux contacter un utilisateur enregistré, clique sur son son pseudo tu arrivera au profil dudit membre, tu pourras lui écrire en privé.
bonne année !
je rêve…
tu t'es loupé, on est pas sur Copains d'Avant !
si tu veux contacter un utilisateur enregistré, clique sur son son pseudo tu arrivera au profil dudit membre, tu pourras lui écrire en privé.
bonne année !
12 mars 2008 à 15:44
Avec createElement, j'imagine que je pourrais toujours supprimer un élément, en créer un autre et l'envoyer le remplacer, mais à long terme, c'est une méthode très peu pratique puisqu'elle amène la suppression de tous les enfants et demande probablement plus de lignes de codes que nécessaire.