Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1387 connectés 

  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [XML] Opération sur un fichier XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[XML] Opération sur un fichier XML

n°322425
Galaad
Posté le 04-03-2003 à 11:49:48  profilanswer
 

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
mood
Publicité
Posté le 04-03-2003 à 11:49:48  profilanswer
 

n°322444
MagicBuzz
Posté le 04-03-2003 à 12:25:48  profilanswer
 

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.


Message édité par MagicBuzz le 04-03-2003 à 12:27:26
n°322509
Galaad
Posté le 04-03-2003 à 13:48:25  profilanswer
 

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.

n°322743
MagicBuzz
Posté le 04-03-2003 à 17:18:40  profilanswer
 

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 ;)

n°322786
Galaad
Posté le 04-03-2003 à 18:13:02  profilanswer
 

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 ?

n°322806
Galaad
Posté le 04-03-2003 à 18:33:45  profilanswer
 

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>';);
 
?>

n°322838
MagicBuzz
Posté le 04-03-2003 à 19:04:58  profilanswer
 

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:
 
:heink:
 
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 :sarcastic:
 
Ah, c'est revenu :)
 
http://www.php.net/manual/fr/ref.domxml.php

n°322843
Galaad
Posté le 04-03-2003 à 19:11:24  profilanswer
 

:) Merci je vais fouiller là dedans, j'avais déjà vu l'api DOM XML mais je pensais ne pas avoir à taper dedans.

n°322883
arghbis
salops de dauphins
Posté le 04-03-2003 à 20:21:34  profilanswer
 

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!!
 :pt1cable:

n°323148
Galaad
Posté le 05-03-2003 à 09:09:47  profilanswer
 

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 ?

mood
Publicité
Posté le 05-03-2003 à 09:09:47  profilanswer
 

n°323149
arghbis
salops de dauphins
Posté le 05-03-2003 à 09:12:50  profilanswer
 

ben si tu fais du php, va voir sur php.net! :whistle:

n°323180
Galaad
Posté le 05-03-2003 à 09:47:50  profilanswer
 

Est ce que DOM permet de faire de la lecture écriture dans les fichiers XML ? Ou je suis obligé de passer par PHP ?

n°323187
arghbis
salops de dauphins
Posté le 05-03-2003 à 09:55:41  profilanswer
 

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??  :whistle:  :hello:

n°323191
Galaad
Posté le 05-03-2003 à 09:58:55  profilanswer
 

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.

n°323193
arghbis
salops de dauphins
Posté le 05-03-2003 à 10:00:55  profilanswer
 

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!

n°323197
Galaad
Posté le 05-03-2003 à 10:07:28  profilanswer
 

OKi merci j'avais commencer avec php j'va donc continuer. Et je demanderai en cas de soucis ;)

n°323284
Galaad
Posté le 05-03-2003 à 10:59:25  profilanswer
 

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 ????

n°323297
arghbis
salops de dauphins
Posté le 05-03-2003 à 11:02:50  profilanswer
 

envoie ton script pour voir. ton xml à l'air correcte dans ton exemple, donc ...

n°323307
Galaad
Posté le 05-03-2003 à 11:09:39  profilanswer
 

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.

n°323314
arghbis
salops de dauphins
Posté le 05-03-2003 à 11:17:45  profilanswer
 

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!

n°323328
Galaad
Posté le 05-03-2003 à 11:26:44  profilanswer
 

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.

n°323335
arghbis
salops de dauphins
Posté le 05-03-2003 à 11:32:02  profilanswer
 

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!  :pt1cable:

n°323361
Galaad
Posté le 05-03-2003 à 12:08:11  profilanswer
 

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 ?

n°323404
arghbis
salops de dauphins
Posté le 05-03-2003 à 13:02:27  profilanswer
 

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!!  :whistle:  :whistle:  :hello:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  HTML/CSS

  [XML] Opération sur un fichier XML

 

Sujets relatifs
lire 1 ligne d'un fichier texteComment crrer un fichier so en C++ sous Gcc ?
[VBScript] URGENT/BOULOT Comment ecrire un " dans un fichier ?Ecrire dans un fichier des nom de variables. Pas leur valeur
[XML] ouvrir 2 frames avec un lienDes sites de récupération de données au format XML
[XML] schema xml + xml qui va avec, comment verifier?[XML-HTML] newbie inside - interpreter du code HTML contenu dans XML
lire un fichier en commençant par la fin [résolu]Fichier OCX manquant
Plus de sujets relatifs à : [XML] Opération sur un fichier XML


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR