XML - suppresion de noeuds dynamiquement [erreur] - XML/XSL - Programmation
Marsh Posté le 15-05-2006 à 16:36:56
/> cette syntaxe ferme la balise normalement...C'est le racourci de </File> non?
Marsh Posté le 15-05-2006 à 16:43:23
mouais;
je prefere fermer les balises explicitement
avec les balises ca donne:
Code :
|
Marsh Posté le 15-05-2006 à 16:59:21
ton fichier xml est correctement, c'est ton traitement php qui suxxe ( d'ailleurs ce post n'a rien a faire dans la cat XML/XSL).
Tout d'abord le module DOMXML de php est à proscrire, depuis la version 4.3.0 il faut utiliser le DOM ( tout court ).
Ensuite tu mélanges getElementsByTagName et getElementById, si tu passes un id à la 1ere fonction alors que celle-ci s'attend à un nom de balise ça risque pas de marcher.
Enfin pour pouvoir faire un removeChild il faut être sur le "père" du noeud que l'on veut supprimer.
Morale de l'histoire, le code devrait ressembler à:
Code :
|
Note: le test via le getAttribute est obligatoire, tu ne peux pas te servir de getElementById( ce qui t'aurais grandement simplifier la vie)...
Enfin si tu pourrais te servir de getElementById mais tu dois auparavant valider ton document via DOMDocument->validate() avec une DTD qui définie l'attribut ID ( ce qui je pense n'est pas pour tout de suite)
Marsh Posté le 16-05-2006 à 09:32:21
Merci beaucoup de m'avoir repondu...Tu m'a bien eclairer sur le removeChild et la difference entre getelementByTagName et GetElementById...
Je voulais utiliser DOM au lieu de DOMXML mais c'a me mettait tout plein d'erreur...
Il reste encore une erreur : Fatal error: Call to undefined function: load() mais je vais essayer de trouver d'ou ca vient...
Comme tu ma l'air bien caler en xml, j'ai une tite question pour créer un fichier xml faut mieux passer par une DTD avant? Je sais pas si j'ai été clair dans ma question...
Marsh Posté le 16-05-2006 à 09:55:15
Pour le problème du load n'aurrais tu point oublier le DOMDocument:: devant?
Ta question est pas specialement claire mais en gros:
- un bon article sur l'interet des DTD
- a mon avis, un DTD est obligatoire lorsqu'il y a "echange" entre différentes entités du flux xml et ce afin de s'assurer de la validité de celui-ci. Si c'est juste pour toi l'interêt est pas énorme, si tu bosses en equipe à vous de pesez le pour et le contre
Marsh Posté le 16-05-2006 à 12:49:07
Pour le probleme de load j'ai un peu chercher sur Internet et finallement j'ai toruver une soluction qui disait de mettre le fichier en .php5 et ca a marcher.
En fait je suis actuellement en stage je suis en train de créer un player videos en flash géré par xml et avec la partie administration en php/xml. Je me posait la question si je devais créer une DTD ou pas en faite...
J'ai deux autre petite question je doit faire la modification d'article est ce qu'il faut mieux que j'utilise replaceNode ou bien que quand l'utilisateur clique su rmodifier ca supprimer l'ancien noeud et il en recré un autre?
Et mon autre petite question j'ai une liste deroulante qui sleectionne un article et il affiche un formulaire avec des champs de texte et les attribut du xml dedans seulement il m'affiche seulement le premier mot de l'attribut...Je sais pas d'ou ca vient...quand je fait echo ($lavraible); ca marche y a tout le texte...
Marsh Posté le 16-05-2006 à 13:25:14
Fourmiz83 a écrit : je doit faire la modification d'article est ce qu'il faut mieux que j'utilise replaceNode ou bien que quand l'utilisateur clique su rmodifier ca supprimer l'ancien noeud et il en recré un autre? |
ça revient au même de faire un replaceNode et de créer puis de supprimer ton noeud ( sauf que dans ce cas l'ordre des entités dans ton flux peut ne pas être conservé).
La question est plutot: dois-je modifier les valeurs et attributs de l'entité concernée ou la recréer... Et la il n'y a que toi qui peut répondre
Fourmiz83 a écrit : Et mon autre petite question j'ai une liste deroulante qui sleectionne un article et il affiche un formulaire avec des champs de texte et les attribut du xml dedans seulement il m'affiche seulement le premier mot de l'attribut...Je sais pas d'ou ca vient...quand je fait echo ($lavraible); ca marche y a tout le texte... |
rien compris code?
Marsh Posté le 16-05-2006 à 13:43:53
En fait pour pouvoir modifier l'article j'ai créer un menu deroulant qui va vers un page php. Cette page php contient un formulaire avec des champs de texte. Les champs de texte sont remplis depuis le fichier xml avec le titre, date,...
code php
<?php
$idFile=$_POST['idfile'];
//$dom=new::DOMDocument();
if(!$dom=DOMDocument::load("videos.xml" )) {
//if(!$dom->load("videos.xml" )){
echo "Erreur lors de l'analyse du document\n";
exit;
}
$filesNodeList = $dom->getElementsByTagName('File');
foreach($filesNodeList as $file){
$titre=$file->getAttributeNode("label1" )->value;
$realiser=$file->getAttributeNode("realiser" )->value;
$date=$file->getAttributeNode("date" )->value;
$description=$file->getAttributeNode("description" )->value;
$lvideos=$file->getAttributeNode("data1" )->value;
$urlliens=$file->getAttributeNode("urllien" )->value;
$urlnom=$file->getAttributeNode("urlnom" )->value;
$id=$file->getAttributeNode("id" )->value;
if ( $id == $idFile){
echo "<form method='post' action='modif_f.php'><BR>";
echo "<input name='titre' type='text' value=".$titre." size='70'><BR>";
echo "<input name='realiser' type='text' value=".$realiser." size='50'><BR>";
echo "<input name='date' type='text' value=".$date." size='10'><BR>";
echo "<textarea name='description' cols='66' rows='4'>".$description."</textarea><BR>";
echo "<input name='date' type='text' value=".$date." size='50'><BR>";
echo "<input name='l_videos' type='text' value=".$lvideos." size='50'><BR>";
echo "<input name='l_article' type='text' value=".$urlliens." size='50'><BR>";
echo "<input name='soumettre' type='submit' value='Modifier'>";
echo "</form>";
}
}
?>
Dans es champs de texte y a juste le premier mot de chaque attribut du XML...
Petite capture de ce que ca donne:
Marsh Posté le 16-05-2006 à 13:51:11
s'quoi ces grosses bouses là:
Code :
|
C'est normal tu t'amuses a retourner un noeud puis tu utilises value dessus au lieu de nodeValue.
Et de toute manière tu as une fonction qui te récupère directement l'attribut: http://fr.php.net/manual/fr/functi [...] ribute.php
Marsh Posté le 15-05-2006 à 16:27:13
BOnjour a tous,
Je souhaite supprimer un noeud de mon XML via PHP...J'ai une erreur qui apparait et
je n'arrive pas a la resoudre...
Code php
ficheir xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="style.css" type="text/css"?>
<Liste>
<File
id="1" label1="Exposition 'RE-INVENTEZ-VOUS' de J-L TORMOS"
data1="videos/videos1.flv" description="La rencontre dun artiste"
realiser="Réalisation Nom Prenom" date="Le 04/02/2006" urlnom="Google"
urllien="http://www.google.fr"/>
</Liste>
Merci d'avance pour votre aide...