Problème XML suppression

Résolu/Fermé
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 - 27 oct. 2010 à 18:27
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 - 12 nov. 2010 à 10:11
Bonjour,
pour supprimer un élément de mon fichier xml, j'utilise removeChild() mais ça ne fonctionne pas et je ne vois pas pourquoi !

Voici l'erreur :
Fatal error: Uncaught exception 'DOMException' with message 'Not Found Error' in cheminfichier\ajax\deletxml.php:16 Stack trace: #0 cheminfichier\ajax\deletxml.php(16): DOMNode->removeChild(Object(DOMElement)) #1 cheminfichier\ajax\ajax_deletefilm.php(120): include('cheminfichier') #2 {main} thrown in cheminfichier\ajax\deletxml.php on line 16


la ligne 16 correspond à removeChild()



A voir également:

6 réponses

avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
2 nov. 2010 à 17:56
$dom->load(longmetrage_xml.xml');
Ça commence déjà mal


if ($suppfilm->hasAttribute("id") == $idfilm) {
DOMElement::hasAttribute retourne un booléen. Ça fonctionne quand même ainsi si $idfilm n'est pas null, false, une chaine vide ou 0.


$dom->save(longmetrage_xml.xml');
Encore une erreur


Voilà la ligne qui pose erreur corrigée :
$suppfilms->getElementsByTagName('films')->item(0)->removeChild($suppfilm);
L'explication : $suppfilms représente le noeud <longmetrage>, hors, c'est depuis le noeud <films> qu'il faut appeler la méthode removeChild() (car c'est ce noeud qui est parent au <film /> qu'on désire supprimer).
1
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
Modifié par griko le 2/11/2010 à 19:10
Merci @avion-f16, je vais tester ça.

Autrement à l'instant, je viens de voir un problème sur un fichier qui fonctionnais bien !
En faite il y a 8 jours, j'ai utilisé $dom->load(le fichier) et là ça fonctionnais très bien mais aujourd'hui je dois réutiliser ça mais ce n'est plus le fichier actualisé en date d'aujourd'hui mais celui de la dernière fois !

Pourquoi ? !
J'ai pensé qu'il fallait fermer le fichier après lecture, vrai ou faux ? Sinon pourquoi ça fait ça ?

Edit : Sinon, peut être que c'est mieux créer un nouveau fichier de copier dedans avant de lire et après lecture, supprimer ce fichier ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
2 nov. 2010 à 19:23
Désolé mais je n'ai rien compris ...
0
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
2 nov. 2010 à 19:27
:) en fait il y a une semaine j'ai utilisé une fonction qui lit les fichier xml afin de récupérer les informations.

J'ai donc utiliser $dom->load()

Mais aujourd'hui, j'ai découvert en ré utilisant cette fonction que c'était les mêmes données que la semaine dernière.

Sachant que le fichier xml à été modifier depuis la semaine dernière.

Donc je comprends pas pourquoi j'ai encore l'ancien fichier alors que on m'avait dit que l'utilisation de load() permettait de rechercher le fichier.

Une idée ? de comment faire pour avoir le fichier à jour ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
2 nov. 2010 à 19:35
Est-ce que si tu ouvres le fichier avec ton éditeur de texte tu vois les changements ?
Si non, alors vérifie que le chmod soit suffisant pour que PHP puisse écrire sur le fichier, ou que tu utilises bien $dom->save()
Si oui, alors c'est plutôt étrange.
0
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
Modifié par griko le 2/11/2010 à 19:38
Pour voir, après chargement, j'ai mis dans un nouveau fichier et c'est toujours le contenu de la semaine dernière :
$dom_sallesO = new DomDocument(); 
$dom_sallesO->load('http://www.xxxx.com/n1/Salles.xml'); 
$dom_sallesO->save($_SESSION['niveau_dossier_includ'].'xml/pathegaumont/Salles.xml');


Sachant que quand je regarde le fichier http://www.xxxx.com/n1/Salles.xml, dans un navigateur il affiche le contenu de cette semaine.
0
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
27 oct. 2010 à 22:34
Personne à une idée ?
0
avion-f16 Messages postés 19249 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 15 juin 2024 4 504
29 oct. 2010 à 17:49
Salut.
Ça serait bien d'avoir le code du traitement complet, et aussi la structure du XML.
0
MastercroW Messages postés 1094 Date d'inscription dimanche 3 octobre 2010 Statut Membre Dernière intervention 31 mai 2019 163
29 oct. 2010 à 17:55
Sans source, nous pouvons rien faire comme le dit avion-f16.
Car la si tu veux on va pas t'inventer des codes qui nous sont venus par hasard x').
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
29 oct. 2010 à 19:06
Voici le code PHP

switch($filmcm_sortiesall['type_film_o_cm']){
	case'longmetrage':
		$dom = new DomDocument();
		$dom->load(longmetrage_xml.xml');
		
		$suppfilms = $dom->documentElement;
		$film = $suppfilms->getElementsByTagName("film");
		
		foreach($film as $suppfilm){
			if ($suppfilm->hasAttribute("id") == $idfilm){
				if ($suppfilm->getAttribute("id") == $idfilm){
					//print_r($suppfilm);
					$suppfilms->removeChild($suppfilm);
				}
			}
		}

		$dom->save(longmetrage_xml.xml');
	break;
}


Et la structure
<?xml version="1.0" encoding="ISO-8859-1"?>
<longmetrage>
	<films></films>
</longmetrage>


Et voici la ligne ajoutée entre <films>
<film id="" name="" url=""/>


0
griko Messages postés 343 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 29 avril 2014 10
12 nov. 2010 à 10:11
Merci @avion, problème résolu !
0