Opération sur un fichier XML [XML] - HTML/CSS - Programmation
Marsh Posté le 04-03-2003 à 12:25:48
Tu dois utiliser dans tous les cas PHP/ASP ou autre, afin de mettre à jour le fichier.
Sinon, pour mettre à jour les données, tu peux passer par JS, mais seul IE 5.01 et suivants supportent ça. NS et MOZ par exemple sont incapables d'accéder aux données XML depuis JavaScript.
Tu peux faire un truc de ce genre :
http://test.manga-torii.com/article/article.xml
(bon, le serveur est encore parti en live... faudra attendre ce soir pour voir le truc )
-> Dans cette page, tu peux modifier à la volée le XML depuis JS, et quand tu valides, une page ASP enregistre le flux XML dans un fichier.
Sinon, tu peux faire exactement de la même façon que pour modifier les données d'une base de données, une série de pages qu'il faut recharger à chaque modification du fichier XML.
Si tu débutes, bon courage, parceque manier les fichiers XML est assez lourd, surtout en PHP où je trouve que les fonctions sont un peu bordelique. En ASP, tu passes par le composant MSXML de Microsoft, qui permet d'instancier le fichier XML sous forme d'objet, avec toutes les méthodes intégrées pour le modifier, c'est un peu plus facile de s'y retrouver (mais ça reste un joyeux bordel quand même )
Sinon, il me semble que pour les fichier XML de structure simple, tu peux y accéder comme dans une base de données, à ce moment tu peux le mettre à jour avec des requêtes SQL, c'est plus simple, mais tu es obligé de te cantonner à des fichier XML de structure très simple.
Marsh Posté le 04-03-2003 à 13:48:25
Je me doutais que j'allait devoir taper dans le php, je dois utiliser linux pour mettre en place une plate-forme ebusiness.
Sinon je regarderai ton exemple, je te remercie.
Marsh Posté le 04-03-2003 à 17:18:40
En fait, le mieu, c'est que quand tu auras des specs plus précises, que tu reviennes avec un exemple concret d'un fichier XML, et des modifs que tu veux y apporter depuis le site.
En effet, sans "support" on peut parler dans le vent pendant des heures sans apporter la moindre solution réalisable
Marsh Posté le 04-03-2003 à 18:13:02
Bon bah je vais abuser alors
J'ai un projet de site Ebusiness à faire sous Linux et en XML et j'aimera mettre à jour via une page HTML le fichier XML suivant :
<?xml version="1.0" encoding="ISO-8859-1"?>
<?xml-stylesheet href="ListeProduits.xsl" type="text/xsl"?>
<catalogue>
<produit>
<type>Processeur</type>
<fabriquant>AMD</fabriquant>
<nom>Athlon XP 1800</nom>
<description>Palomino</description>
<image>XP1700.gif</image>
<prix>500x20AC</prix>
</produit>
<produit>
<type>Processeur</type>
<fabriquant>AMD</fabriquant>
<nom>Athlon XP 2400</nom>
<description>Thoughbred</description>
<image/>
<prix>1500x20AC</prix>
</produit>
</catalogue>
C'est à dire que via une page j'aimerai indiquer de nouveaux produits que je pourrais vendre sur mon site.
Je vien d'essayer avec PHP mais il me met la ligne au début et il mange une partie de la fin ? Je pense qu'il ne permet pas d'augmenter la taille du fichier, un problème que l'on rencontre aussi sur les bases SQL si on ne permet pas à la table de se "resizer". T'aurais une petit idée ?
Marsh Posté le 04-03-2003 à 18:33:45
Bon j'ai trouvé pour qu'il ne mange pas les dernières lignes.
Par contre le champ renseigné se positionne bien avant </catalogue> mais il mange une partie du produit précédent, il supprime de <prix> jusqu'à </produits> ????
Voilà le script :
<?
function insert_texte($Myfile,$insertchaine,$positionchaine)
{
$fo = fopen($Myfile,"r++" );// on lis notre fichier
$lecture = fread($fo, 8192);//et on le place dans la variable lecture
$pos = strpos($lecture,$positionchaine);// ici on recupere la position juste avant le mot
$findutexte = substr($lecture,$pos);
fseek($fo,$pos);// on se place dans le fichier a la position recupèrer
fputs ($fo,$insertchaine.$findutexte);// et on inscrit le nouveau texte
fclose($fo);
}
$TYP = "Processeur";
$FAB = "AMD";
$NOM = "Athlon XP 2200";
$DESCRIPT = "Palomino";
$IMAGE = "";
$PRIX = "120";
insert_texte ("Produits.xml","<produit><type>$TYP</type><fabriquant>$FAB</fabriquant><nom>$NOM</nom><description>$DESCRIPT</description><image>$IMAGE</image><prix>$PRIX</prix></produit>",'</catalogue>';
?>
Marsh Posté le 04-03-2003 à 19:04:58
Bon, euh...
En PHP, j'y connais pas grand chose, mais une chose est sûre: si tu continue à bosser dans un fichier XML comme dans un fichier plat, passe à un fichier plat avec un masque, ça sera plus rapide et bien plus simple
Plus sérieusement, jette un coup d'oeil à ces fonctions, elle feront ce que tu veux:
C'est bien ma veine... www.php.net doit planter une fois pas an, ça tombe juste au moment où je recherche un truc dessus
Ah, c'est revenu
http://www.php.net/manual/fr/ref.domxml.php
Marsh Posté le 04-03-2003 à 19:11:24
Merci je vais fouiller là dedans, j'avais déjà vu l'api DOM XML mais je pensais ne pas avoir à taper dedans.
Marsh Posté le 04-03-2003 à 20:21:34
le seul truc embêtant, c que si tu travail sur du XML avec DOM et que tes fichiers sont de grande taille, ben tu va avoir du mal!!
paske DOM est très partique et simple à utiliser, mais il a le désavantage de devoir représenter toute l'arborescence XML en mémoire avant de travailler dessus!!
Marsh Posté le 05-03-2003 à 09:09:47
C'est pas très grave vu que c'est juste pour un projet.
Est ce que quelqu'un connais un bon site sur DOM ?
Marsh Posté le 05-03-2003 à 09:47:50
Est ce que DOM permet de faire de la lecture écriture dans les fichiers XML ? Ou je suis obligé de passer par PHP ?
Marsh Posté le 05-03-2003 à 09:55:41
DOM te permet bien sûr de faire de la lecture écriture dans un fichier XML! mais tu sais, si tu tapes DOM XML dans google, tu trouveras gavé de doc! donc renseigne toi un peu!! pour des trucs plus compliqué, si tu bloque, hésite pas à demander! mais on est pas un centre de formation, alors essaye de chercher un tit peu ok??
Marsh Posté le 05-03-2003 à 09:58:55
Pas de problème je fouille mais j'ai pas trouvé grand chose, j'avais donc un doute quand à l'utilisation de dom pour l'écriture dans les fichiers.
Marsh Posté le 05-03-2003 à 10:00:55
DOM n'est qu'une méthode de "parcours" du XML, après c son implémentation dans le langage que tu choisis qui fait la différence. Je sais qu'en perl et java, tu peux lire et écrire. En php je ne sais pas, mais ça m'étonnerait qu'il ne l'ai pas fait!
Marsh Posté le 05-03-2003 à 10:07:28
OKi merci j'avais commencer avec php j'va donc continuer. Et je demanderai en cas de soucis
Marsh Posté le 05-03-2003 à 10:59:25
Bon je viens d'améliorer mon script PHP. Je peux maintenant saisir les informations à rentrer dans le fichier XML via un formulaire.
J'ai par contre toujours le problème de "mangeage" d'une partie du fichier XML, il trouve bien la balise de fin (soit </catalogue> ) et écrit avant mais il coupe cette partie : ><prix>1500x20AC</prix></produit>
Quelqu'un aurait une petite idée ????
Marsh Posté le 05-03-2003 à 11:02:50
envoie ton script pour voir. ton xml à l'air correcte dans ton exemple, donc ...
Marsh Posté le 05-03-2003 à 11:09:39
J'ai créée une fonction d'insertion, il trouve la balise </catalogue>, la deuxième partie contrôle les champs renseignés et si un champ n'est pas renseigné, il indique à la personne responsable de la saisie, quels champs ne sont pas renseignés.
function insert_texte($Myfile,$insertchaine,$positionchaine)
{
$fo = fopen($Myfile,"r++" );// on lis notre fichier
$lecture = fread($fo, filesize("Produits.xml" ));//et on le place dans la variable lecture
$pos = strpos($lecture,$positionchaine);// ici on recupere la position juste avant le mot
$findutexte = substr($lecture,$pos);
fseek($fo,$pos);// on se place dans le fichier a la position recupèrer
fputs ($fo,$insertchaine.$findutexte);// et on inscrit le nouveau texte
fclose($fo);
}
?>
<?php
if (($type=="" )||($fabriquant=="" )||($nom=="" )||($description=="" )||($image=="" )||($prix=="" )){
if($type=="" ) print("Veuillez saisir le type de matériel<BR>\n" );
if($fabriquant=="" ) print("Fabriquant<BR>\n" );
if($nom=="" ) print("Nom<BR>\n" );
if($description=="" ) print("Description<BR>\n" );
if($image=="" ) print("Image<BR>\n" );
if($prix=="" ) print("Prix<BR>\n" );
}
else {
insert_texte ("Produits.xml",
"<produit>
<type>$type</type>
<fabriquant>$fabriquant</fabriquant>
<nom>$nom</nom>
<description>$description</description>
<image>$image</image>
<prix>$prix</prix>
</produit>"
,'</catalogue>';
J'ai coupé le reste du script générant l'affichage HTML.
Marsh Posté le 05-03-2003 à 11:17:45
attends, y'a un truc qui va pas là! on te l'a déjà dit! si c pour faire de la recher de texte dans un fichier plat, pas la peine d'utiliser XML! si tu veux utiliser XML, tu utilise les outils qui vont avec!
de plus, la 2eme variable que tu passe à ta méthode insert texte, c un peu n'importe koi! c pas la variable qui doit contenir les balises xml, mias la méthode qui doit les définir pour tes variables type, fabricat, etc... sinon c très goret et source d'erreur!
Marsh Posté le 05-03-2003 à 11:26:44
Mon projet portant sur XML, on m'a demandé de ne pas utiliser de fichier plat pour la gestion des données de même pour l'affichage xsl j'ai besoin de fichiers xml. Sinon pour gérer mes fichiers XML je n'ai vu que PHP ou DOM qui s'appuie sur ASP. Je n'ai donc trouvé que ça à faire pour mes opérations.
Ma déclaration et je le conçoit un peu barbare mais bon faut bien que je fasse mes armes dans le domaine PHP.
Marsh Posté le 05-03-2003 à 11:32:02
bon visiblement, php est pas encore au point avec xml DOM! pas grave! prends un autre langage : genre tu fais un tit script perl qui lit ton fichier xml avec DOM et ajoute les informations que tu veux à l'enbdroit que tu décides! ensuite, ben soit tu transforme ce script en cgi, soit tu l'appelle depuis ta page php.
mais franchement, fait pas du traitement de texte de base sur du xml, c ridicule!
Marsh Posté le 05-03-2003 à 12:08:11
Je persiste là dedans
J'ai l'impression qu'il trouve bien le point ou écrire et k'il écrit la moitié avant en écrasant les caractères précédents et l'autre moitié correctement sans écraser </catalogue>
Quelqu'un aurait une idée ?
Marsh Posté le 05-03-2003 à 13:02:27
bon alors si tu insiste : tu connais la structure de ton document non??
sur la dernière ligne tu n'as que ta balise </catalogue> n'est-ce pas??
donc dans ce cas, plutôt que de faire un strpos, fais un $chaine=explode("\n", $fread);
puis pop de $chaine dans une variable $i puis unshift de ta nouvelle entrée, unshift $i, $chaine_text=implode("\n", $chaine)
write $chaine
voilà! au moins tu es sûr de ce que tu fais, et c tout aussi gorret sur du XML!!
Marsh Posté le 04-03-2003 à 11:49:48
Salut,
J'aimerai faire des opérations sur un fichier XML, en ajoutant des lignes via une autre page, comme par exemple rajouter un produit dans un catalogue. Je dois utiliser quoi ? JS ? PHP ?
Quelqu'un a une idée ?
Message édité par Galaad le 04-03-2003 à 11:56:53