Modifier XML avec PHP
Fermé
dj-postka
Messages postés
2305
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
11 février 2019
-
14 avril 2011 à 13:16
dj-postka Messages postés 2305 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 11 février 2019 - 15 avril 2011 à 14:36
dj-postka Messages postés 2305 Date d'inscription dimanche 11 mai 2008 Statut Membre Dernière intervention 11 février 2019 - 15 avril 2011 à 14:36
A voir également:
- Modifier XML avec PHP
- Modifier liste déroulante excel - Guide
- Modifier dns - Guide
- Comment modifier un pdf - Guide
- Xml viewer - Télécharger - Édition & Programmation
- Modifier story facebook - Guide
4 réponses
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
14 avril 2011 à 14:41
14 avril 2011 à 14:41
Bonjour,
Le moyen le plus simple: gérer les références de photos en base de données, puis générer le XML entièrement après chaque validation de photo.
En PHP5, il a la classe simpleXml, assez facile à utiliser, exemple:
Avec ça, je construit un XML de ce genre:
A+
Le moyen le plus simple: gérer les références de photos en base de données, puis générer le XML entièrement après chaque validation de photo.
En PHP5, il a la classe simpleXml, assez facile à utiliser, exemple:
function genereFichierXmlAiresDuPays($codePays) { $sql = "...ici la requête qui récupère mes données...."; $listeAires = $this->fetch($sql); $airesXml = new SimpleXMLElement('<?xml version="1.0" encoding="UTF-8"?><aires pays="' . $codePays . '"></aires>'); $codeProvince = 'XXX'; $nomVille = 'XXX'; foreach ($listeAires AS $key => $row) { // on crée le noeud province à chaque changement de province if ($codeProvince != $row['province']) { $codeProvince = $row['province']; $province = $airesXml->addChild('province'); if (!empty($row['province'])) { // on récupère le nom de la province à partir de son code $resultat = $this->getProvince($codePays, $codeProvince); $province->addAttribute('nom', $resultat[0]['nom_province']); $province->addAttribute('code', $codeProvince); } else { $province->addAttribute('nom', $codePays); } } // on crée le noeud ville à chaque changement de ville, ce dans le noeud province if ($nomVille != $row['ville']) { $nomVille = $row['ville']; $ville = $province->addChild('ville'); $ville->addAttribute('nom', $row['ville']); if (!empty($row['ville_vo'])) { $ville->addAttribute('ville_vo', $row['ville_vo']); } } $aire = $ville->addChild('aire'); $aire->addAttribute('num_fiche', $row['num_fiche']); $aire->addAttribute('type_aire', $row['type_aire']); $aire->addChild('adresse', str_replace('&', '&', $row['adresse'])); $aire->addChild('longitude', $row['longitude']); $aire->addChild('latitude', $row['latitude']); if ($row['photo'] == 'O') { $aire->addChild('photo', $row['photo']); } if (!empty($row['elevation'])) { $aire->addChild('elevation', $row['elevation']); } if (!empty($row['commentaire'])) { $aire->addChild('commentaire','OK'); } if (!empty($row['parametres'])) { $aire->addChild('parametres'); $parametres = simplexml_load_string(str_replace("&","&",$row['parametres'])); foreach ($parametres AS $val) { // echo $val->getName(); die; $aire->parametres->addChild($val->getName(), $val); } } } return $airesXml; }
Avec ça, je construit un XML de ce genre:
<?xml version="1.0" encoding="UTF-8"?> <aires pays="LT"> <province nom="LT"> <ville nom="KAUNAS"> <aire num_fiche="100012" type_aire="Camping"> <adresse>CP Jonavos g. 51A</adresse> <longitude>23.91778</longitude> <latitude>54.93424</latitude> <elevation>27</elevation> <parametres> <telephoneFixe>+370 618 09407</telephoneFixe> <nuiteePossible>oui</nuiteePossible> </parametres> </aire> </ville> </aire> </ville> </province> </aires>
A+
dj-postka
Messages postés
2305
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
11 février 2019
302
14 avril 2011 à 14:42
14 avril 2011 à 14:42
J'ai réussi à écrire, mais il m'efface tout plutôt que d'écrire a la suite.
<?php
//ouverture du XML
$f='............................/image_list.xml';
//lecture du XML
$contents = file_get_contents("$f");
//texte ajouter
$text = "Mon texte a ajouter";
//droits E/L
$handle = fopen($f,"w+");
//ecriture du XML
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo 'Ecriture terminé';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
?>
<?php
//ouverture du XML
$f='............................/image_list.xml';
//lecture du XML
$contents = file_get_contents("$f");
//texte ajouter
$text = "Mon texte a ajouter";
//droits E/L
$handle = fopen($f,"w+");
//ecriture du XML
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo 'Ecriture terminé';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
?>
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
14 avril 2011 à 17:22
14 avril 2011 à 17:22
je vous ai dit de regarder du cote de la classe simpleXml.
On charge une structure xml comme suit:
$xml = simple_xml_loadfile(....mon fichier xml à charger....);
....ici le bout de code qui va bien pour rajouter une structure.... -> voir les fonctions addChild et addAttribute
ensuite, on réécrit dans le fichier:
$xml->asXml('....mon fichier à qsauvegarder....');
je vous donne une piste, ensuite prenez un peu de temps pour lire la doc en ligne. Goggle et chercher:
php simpleXml
Il y a beaucoup d'exemples.
Votre problème est réglé en 2 heures chrono.
A+
On charge une structure xml comme suit:
$xml = simple_xml_loadfile(....mon fichier xml à charger....);
....ici le bout de code qui va bien pour rajouter une structure.... -> voir les fonctions addChild et addAttribute
ensuite, on réécrit dans le fichier:
$xml->asXml('....mon fichier à qsauvegarder....');
je vous donne une piste, ensuite prenez un peu de temps pour lire la doc en ligne. Goggle et chercher:
php simpleXml
Il y a beaucoup d'exemples.
Votre problème est réglé en 2 heures chrono.
A+
dj-postka
Messages postés
2305
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
11 février 2019
302
14 avril 2011 à 18:09
14 avril 2011 à 18:09
Déjà merci d'avoir répondu et désolé, je n'avais pas vu votre premier post. Du coup j'ai réussi à faire ce que je voulais, a quelque choses près.
Voici tout mon code:
<?php
//----------------------------
// DEFINITION DES VARIABLES
//----------------------------
$target = 'Gallery_images/bus/Gallery_images/'; // Repertoire cible
$f='Gallery_images/bus/Gallery_files/image_list.xml'; // Fichier XML
$files = $_FILES['fichier']['name'];
//----------------------
// SCRIPT D'UPLOAD
//----------------------
?>
<html>
<head>
<title>Bus - Upload</title>
</head>
<body>
<?php
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
$contents = file_get_contents("$f");
$text = "<image thumbnail="$_FILES['fichier']['name']" large_image="$_FILES['fichier']['name']" caption="Image 1 caption" transition="random"></image>";
$handle = fopen($f,"a+");
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo '<b>XML Mis a jour avec succes !</b>';
echo '<hr />';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
// Si upload OK alors on affiche le message de réussite
echo '<b>Fichier uploader avec succes !</b>';
echo '<hr />';
echo '<b>Fichier uploader :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Envoyer le fichier :</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Uploader" />
</form>
</body>
</html>
Le formulaire d'upload est couplé avec le code qui modifie le XML. Avec ce code, je reçois ce message:
Parse error: syntax error, unexpected T_VARIABLE in /homez.41/publibus/www/admin_upload/upload_bus.php on line 27
J'ai modif un peux, avant il éditait bien mon XML, mais écrivais "$files" plustôt que le nom de l'image uploadé. L'entriprise ou je suis en stage ne savent pas si il on une BDD, donc pour votre méthode ça va être difficile.
Voici tout mon code:
<?php
//----------------------------
// DEFINITION DES VARIABLES
//----------------------------
$target = 'Gallery_images/bus/Gallery_images/'; // Repertoire cible
$f='Gallery_images/bus/Gallery_files/image_list.xml'; // Fichier XML
$files = $_FILES['fichier']['name'];
//----------------------
// SCRIPT D'UPLOAD
//----------------------
?>
<html>
<head>
<title>Bus - Upload</title>
</head>
<body>
<?php
if(!empty($_POST['posted'])) {
// On vérifie si le champ est rempli
if(move_uploaded_file($_FILES['fichier']['tmp_name'],$target.$_FILES['fichier']['name'])) {
$contents = file_get_contents("$f");
$text = "<image thumbnail="$_FILES['fichier']['name']" large_image="$_FILES['fichier']['name']" caption="Image 1 caption" transition="random"></image>";
$handle = fopen($f,"a+");
if (is_writable($f)) {
if (fwrite($handle, $text) === FALSE) {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
exit;
}
echo '<b>XML Mis a jour avec succes !</b>';
echo '<hr />';
fclose($handle);
}
else {
echo 'Impossible d\'écrire dans le fichier '.$f.'';
}
// Si upload OK alors on affiche le message de réussite
echo '<b>Fichier uploader avec succes !</b>';
echo '<hr />';
echo '<b>Fichier uploader :</b> ', $_FILES['fichier']['name'], '<br />';
echo '<hr />';
echo '<br /><br />';
} else {
// Sinon on affiche une erreur pour le champ vide
echo '<b>Le champ du formulaire est vide !</b><br /><br />';
}
}
?> <form enctype="multipart/form-data" action="<?php echo $PHP_SELF; ?>" method="POST">
<b>Envoyer le fichier :</b><br /><br />
<input type="hidden" name="posted" value="1" />
<input name="fichier" type="file" />
<input type="submit" value="Uploader" />
</form>
</body>
</html>
Le formulaire d'upload est couplé avec le code qui modifie le XML. Avec ce code, je reçois ce message:
Parse error: syntax error, unexpected T_VARIABLE in /homez.41/publibus/www/admin_upload/upload_bus.php on line 27
J'ai modif un peux, avant il éditait bien mon XML, mais écrivais "$files" plustôt que le nom de l'image uploadé. L'entriprise ou je suis en stage ne savent pas si il on une BDD, donc pour votre méthode ça va être difficile.
dj-postka
Messages postés
2305
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
11 février 2019
302
14 avril 2011 à 18:10
14 avril 2011 à 18:10
Ps: il y a surement plein de choses à optimiser, des erreurs... Je ne sais pas codé en php, donc j'ai pris quelque bouts de code du net, codé quelques lignes, ce qui a donné ça.
dj-postka
Messages postés
2305
Date d'inscription
dimanche 11 mai 2008
Statut
Membre
Dernière intervention
11 février 2019
302
15 avril 2011 à 14:36
15 avril 2011 à 14:36
Bon je vais essayer votre solution, j'ai eu plus de temps pour réaliser tout ça. Le pb, c'est que je n'ai pas de BDD, faut que j'en trouve une.