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

  FORUM HardWare.fr
  Programmation
  XML/XSL

  XML-XSL => XML, modification d'un fichier XML

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

XML-XSL => XML, modification d'un fichier XML

n°1770564
yoshi42
Posté le 07-08-2008 à 11:13:21  profilanswer
 

Bonjour,
J'ai un fichier XML qui me permet de stocker et d'organiser des données pour un site. L'utilisateur peut ajouter des données à ce XML via un formulaire.
j'aimerai modifier ce fichier XML via un fichier XSL auquel j'enverrai les paramètres. La plupart du temps les modifications consisteront à ajouter une ou quelques lignes avec le reste du document à l'identique.
J'aimerai également écraser l'ancien fichier et le remplacer par le fichier modifié.
Je m'y connait pas tres bien en XSL... Est ce que tout cela vous parait possible sachant que sur le site j'utilise du PHP avec le transformateur XSLTProcessor qui permet notamment d'envoyer des paramètres au xsl à l'aide la méthode setParameter...
Merci pour votre aide

mood
Publicité
Posté le 07-08-2008 à 11:13:21  profilanswer
 

n°1770958
samsayan
Posté le 07-08-2008 à 22:00:07  profilanswer
 

Bien sûr que c'est possible, mais ce n'est pas du côté de XSLt que tu dois chercher, c'est PHP qui se chargera de modifier le fichier.
 
Pour cela tu peux générer ton fichier xml sans passer par un parseur XML ou bien utiliser DOM en PHP.
 
Voila quelques pistes.

n°1771010
yoshi42
Posté le 08-08-2008 à 08:53:00  profilanswer
 

samsayan a écrit :

Bien sûr que c'est possible, mais ce n'est pas du côté de XSLt que tu dois chercher, c'est PHP qui se chargera de modifier le fichier.
 
Pour cela tu peux générer ton fichier xml sans passer par un parseur XML ou bien utiliser DOM en PHP.
 
Voila quelques pistes.


 
Merci pour ta réponse mais je ne veux pas passer par du code PHP justement!
En fait mon code source ne doit pas etre accessible aux gens qui vont faire la maintenance du site donc il faut un maximum de config extérieure.
C'est pour ça que je voulais leur permettre à l'aide d'un fichier XSL de modifier les transformations opérables sur le fichier XML de départ.

n°1771961
MagicBuzz
Posté le 11-08-2008 à 14:46:13  profilanswer
 

pose tout sur la table, et réexplique, parceque là...
 
1/ le code XSL est parfaitement visible avec n'importe quel navigateur, alors que le PHP a au moins le mérite de rester sur le serveur et n'être consultable qu'avec un accès admin sur le serveur
2/ ton XSL, il va pas modifier un fichier tout seul. ton flux de sortie, faudra bien l'enregistrer avec quelquechose, et ça c'est pas XSL qui le permet tout seul, alors vu que t'utilises déjà PHP...
3/ j'ai rien pigé à ce que tu veux faire, en gros tu veux faire une usine à gaz en XSL totallement imbittable alors que ça demande 3 lignes claires en PHP ?

n°1771971
masklinn
í dag viðrar vel til loftárása
Posté le 11-08-2008 à 15:04:35  profilanswer
 

MagicBuzz a écrit :

1/ le code XSL est parfaitement visible avec n'importe quel navigateur, alors que le PHP a au moins le mérite de rester sur le serveur et n'être consultable qu'avec un accès admin sur le serveur


Il parle de faire la transfo en XSL mais côté serveur en appelant le processeur PHP, donc non [:petrus75]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1772067
MagicBuzz
Posté le 11-08-2008 à 17:11:03  profilanswer
 

et du coup je vois pas en quoi ça va cacher quoi que ce soit pour les mecs qui vont faire la maintenance. ça veut rien dire son truc :spamafote:

n°1772068
masklinn
í dag viðrar vel til loftárása
Posté le 11-08-2008 à 17:11:54  profilanswer
 

MagicBuzz a écrit :

et du coup je vois pas en quoi ça va cacher quoi que ce soit pour les mecs qui vont faire la maintenance. ça veut rien dire son truc :spamafote:


Si j'ai bien compris, il voudrait que les mecs n'aient que du XSL à éditer (...) et non du PHP.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1772075
MagicBuzz
Posté le 11-08-2008 à 17:17:57  profilanswer
 

grmpf
 
sauf que là, je pige encore moins. le xsl on est pas censé le modifier tous les 4 matins.
quant à modifier le contenu d'un fichier xml avec un fichier xsl, je trouve toujours ça aussi bizarre. c'est comme tenter de ramasser des balles de ping pong avec une fourche...
 
enfin pour moi, oui, tout est possible, mais tout n'est pas au mieux adapté. faudrait déjà avoir plus de précisions quant au besoin à mon avis

n°1772082
masklinn
í dag viðrar vel til loftárása
Posté le 11-08-2008 à 17:20:58  profilanswer
 

MagicBuzz a écrit :

sauf que là, je pige encore moins. le xsl on est pas censé le modifier tous les 4 matins.


Là on est d'accord


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1772723
yoshi42
Posté le 13-08-2008 à 01:34:16  profilanswer
 

Devant tant de réaction je me devais d'intervenir ;)
 

Citation :


pose tout sur la table, et réexplique, parceque là...  


 
ok, ok, bon accrochez vous  :sweat:  
 
Bon, en fait je suis  en train de développer une API en php qui va permettre d'accéder à des ressources d'un annuaire LDAP.L'architecture de cette API est inspirée des services web REST. Chaque entrée de l'annuaire désignée par son (Distinguished Name) est accessible par un URI. L'api va associer (par l'intermédiaire d'un fichier : mapping.xml) Un URI à l'URL de la ressource dans le LDAP
 
exemple:

Code :
  1. <ecole1>
  2.   <URL>ou=ecole1,dc=site,dc=com</URL>
  3.   <employe1>
  4.      <URL>ou=employe1</URL>
  5.    </employe1>
  6.    <employe2>
  7.      <URL>ou=employe2</URL>
  8.    </employe2>
  9. </ecole1>
  10. <ecole2>
  11. <URL>ou=ecole2,dc=site,dc=com</URL>
  12. ....


 
pour appeler la ressource designé par le dn="ou=employe1,ou=ecole1,dc=site,dc=com" il faut utiliser l'URI :
ecole1/employe1 . Si je veux la ressource avec le dn="ou=ecole2,dc=site,dc=com", j'utilise l'URI : ecole2
 
etc...
 
Ce système permet aux clients qui passe par l'API de ne pas dépendre directement de la structure de l'annuaire LDAP....Si je  la structure du LDAP est modifié je n'ai pas besoin d'intervenir sur tous les clients qui appellent les ressources, mais seulement sur les balises URL du fichier de mapping!!! Pour n clients, une modif sur le LDAP n'entraine plus 1 modif sur n fichier mais sur 1 seul fichier.
 
Le fait de centraliser l'accès aux ressources me permet également facilement d'autoriser ou non l'accès. Cela présente encore bien d'autres avantages.......
 
Mais le pb que je rencontre c'est que quand on veut rajouter une ressource à l'annuaire il faut MODIFIER ce fichier de mapping!
sinon les ressources rajoutées ne seront pas accessibles. Je sais que les annuaires LDAP ne sont pas destinés  à être modifier en permanence (ils sont moins rapide en écriture que des bases SQL...) mais on m'impose cette architecture en me spécifiant qu'elle va permettre des configurations et va donc souvent être modifié.
 
Bien entendu il ne faut pas(dans la plupart des cas) avoir à modifier le mapping à la main. Il ne faut pas non plus que le développeur du client modifie le code de mon api. En revanche ce que peut faire le développeur du client c'est fournir un fichier de mapping ainsi que des fichiers XSL qui vont définir pour chaque ressource comment doit être modifié le fichier de mapping..
 
Je sais pas si vous voyez à peu près ce que je veux faire...
 
En tout cas je suis ouvert à toute remarque ^^

mood
Publicité
Posté le 13-08-2008 à 01:34:16  profilanswer
 

n°1772724
yoshi42
Posté le 13-08-2008 à 01:52:35  profilanswer
 


MagicBuzz a écrit :

sauf que là, je pige encore moins. le xsl on est pas censé le modifier tous les 4 matins.


Le xsl , une fois défini, ne sera pas modifier tous les 4 matins (on doit juste pouvoir le modifier si on veut changer la structure du fichuer de mapping

MagicBuzz a écrit :

quant à modifier le contenu d'un fichier xml avec un fichier xsl, je trouve toujours ça aussi bizarre. c'est comme tenter de ramasser des balles de ping pong avec une fourche...


http://www.commentcamarche.net/xml/xmlxsl.php3
 
"L'arbre source peut être entièrement remodelé et filtré ainsi qu'ajouter du contenu à l'arbre résultat, si bien que l'arbre résultat peut être radicalement différent de l'arbre source."

n°1772857
MagicBuzz
Posté le 13-08-2008 à 12:53:35  profilanswer
 

il est possible de modifier un flux XML avec une transformation XSL.
cependant, ce n'est qu'un détournement de la fonction du XSL, qui est la pour faire une transformation du fichier, pas une modification.
 
en gros, ajouter des balises dans un fichier XML, c'est comme casser une noix avec une voiture en roulant dessus. ça marche, m'enfin y'a plus simple.
 
pour modifier un fichier XML, il y a DOM et SAX. L'un comme l'autre sont très simples d'utilisation (surtout DOM), et seront bien plus efficaces/adaptés que le XSL.
 
donc je maintiens, en 3 lignes de PHP (et pas une de plus) tu peux faire ce qui nécessitera 100 lignes de XSL imbittable. et t'auras pas plus de modifications à faire dans le PHP que dans le XSL quand il s'agit de rajouter une base : juste une paramètre à passer :spamafote:
 
clairement, tu cherches pas à utiliser le bon outil à mon avis.

Message cité 1 fois
Message édité par MagicBuzz le 13-08-2008 à 13:07:30
n°1772867
yoshi42
Posté le 13-08-2008 à 13:47:23  profilanswer
 

MagicBuzz a écrit :

Clairement, tu cherches pas à utiliser le bon outil à mon avis.


ok, mais le pb, je le répéte, c'est que les client ne vont pas changer le code de l'api à chaque fois qu'il veulent ajouter une ressource!!!
L'avantage des xsl c'est qu'ils permettent d'externaliser la config. A chaque fois qu'on veut rajouter une ressource, il suffit de faire un nouveau xsl.
Tous les xsl seront stockées dans un repertoire. L'api ira lire dans le repertoire le fichier xsl correspondant à la ressource à ajouter et modifira en conséquence le fichier de mapping.
 
Si vous avez d'autres solutions, je suis preneur....Mais pour l'instant j'en vois pas
 
Ps: je précise qu'il ne s'agit pas seulement d'ajouter une seule balise à chaque fois mais il peut etre necessaire pour l'ajout d'une ressource d'ajouter un ensemble de balise imbriquée (donc envoyer à l'API un paramètre avec le nom de la balise à ajouter ne suffit pas...). C'est pour ça que j'essaye de passer par des xsl qui vont permettre de définir l'ensemble des balises à ajouter et leur niveau d'imbriquation

Message cité 1 fois
Message édité par yoshi42 le 13-08-2008 à 13:53:59
n°1773183
MagicBuzz
Posté le 14-08-2008 à 11:13:58  profilanswer
 

yoshi42 a écrit :


ok, mais le pb, je le répéte, c'est que les client ne vont pas changer le code de l'api à chaque fois qu'il veulent ajouter une ressource!!!


mais t'as rien à changer non plus si tu fais ça en PHP :o
 
et si t'as une modif à faire dans ton XSL, elle sera plus facile à faire en PHP qu'en XSL, crois-moi
 
et si tu dois créer un tas de balises comme ça, alors tu fais une page php et un fichier xml qui contient la liste des balises à ajouter. en faisant un truc propre, t'auras qu'un xml à fournir à chaque fois.
 
mais jamais de la vie ne fais ça en xsl.
 
(d'autant que je vois absolument pas ce que tu vas faire avec tes 50 xsl dans le même répertoire...)

Message cité 1 fois
Message édité par MagicBuzz le 14-08-2008 à 11:16:00
n°1773275
yoshi42
Posté le 14-08-2008 à 14:09:59  profilanswer
 

MagicBuzz a écrit :


mais t'as rien à changer non plus si tu fais ça en PHP :o
 
et si t'as une modif à faire dans ton XSL, elle sera plus facile à faire en PHP qu'en XSL, crois-moi
 
et si tu dois créer un tas de balises comme ça, alors tu fais une page php et un fichier xml qui contient la liste des balises à ajouter. en faisant un truc propre, t'auras qu'un xml à fournir à chaque fois.
 
mais jamais de la vie ne fais ça en xsl.
 
(d'autant que je vois absolument pas ce que tu vas faire avec tes 50 xsl dans le même répertoire...)


 
Merci pour tes réponses...
Bon je vais essayer de bien définir ce qu'il me faut parce que j'arrive pas à voir si c'est possible avec l'architecture que tu décris...
 
En fait, j'ai un fichier XML initial sur le serveur qui  doit pouvoir être modifié par des clients distants. J'avais dans l'idée de permettre la configuration de l'API avec un répertoire contenant les xsl correspondant aux différentes ressources que les clients vont pouvoir ajouter.Ces xsl décrivent juste une structure , je ne connais pas les valeurs des balises (les clients envoient aux xsl les valeurs sous forme de paramètre)!!!!
 
Donc si je résumes:
le client veut ajouter une ressource personne au fichier sur le serveur...Il envoie à l'API le type de la ressource (personne) qui va permettre d'aller chercher le bon fichier xsl (personne.xsl) et il va envoyer à l'API  les paramètres pour initilaiser les variables dans le fichier xsl: nom,prenom,age.....
il faut ensuite que l'api crée le flux xml à partir du xsl et le rajoute au xml initilal
 
Comment tu ferais sans xsl? Il faut que la solution soit la plus générique possible pour que l'API puisse être utilisé dans n'importe quel situation
Encore merci pour ton aide ^^


Message édité par yoshi42 le 14-08-2008 à 21:02:55
n°1776753
MagicBuzz
Posté le 24-08-2008 à 19:08:57  profilanswer
 

Au lieu de XSL, tu poses dans ton répertoire des XML. De toute façon, un XSL ça contient pas de données, ça fait pas de définition de structure ni rien.
 
A la grande limite, c'est même une DTD ou un XSD modifié que du devrait manipuler, puisqu'il s'ahit de changer la structure (et DTD/XSD sont justement deux langages permettant de définir la structure d'un fichier XML)
 
En tout cas, je ne pige rien à ton charabiat :

Citation :

le client veut ajouter une ressource personne au fichier sur le serveur...Il envoie à l'API le type de la ressource (personne) qui va permettre d'aller chercher le bon fichier xsl (personne.xsl) et il va envoyer à l'API  les paramètres pour initilaiser les variables dans le fichier xsl: nom,prenom,age.....  
il faut ensuite que l'api crée le flux xml à partir du xsl et le rajoute au xml initilal


 
Soit vraiment 15 jours de vacances ne m'ont pas fait du bien, soit tu devrais en prendre un peu ;) J'ai l'impression que tu te compliques la vie d'une façon assez incroyable. Ou alors t'as un problème trop compliqué pour moi, car ce que tu veux faire ne correspond pas du tout au scénario que tu envisage pour le faire d'après moi.
 
En fait, ça ne me serait jamais venu à l'esprit d'utiliser un XSL pour faire ce que tu tentes de faire.
 
Pour résumer.
 
T'as un fichier XML "original" :


<root>
  <ElementA>val1</ElementA>
  <ElementB>
    <ElementBA>val2</ElementBA>
  </ElementB>
</root>


 
C'est bien ça ?
 
Et toi, ton utilisateur veut dire "j'ajoute un élément <PERSONNE> dans ma balise <elementA> et ça contiendra la valeur TOTO"
C'est bien ça ?
 
Alors pour moi, t'as juste à passer les paramètres suivants :
 
api.php?xpath=/root/ElementA[0]&action=createElement&elementName=PERSONNE&elementValue=TOTO
 
Et roule ma poule.
 
Avec DOM, tu charge le xml original, tu localises l'élément à modifier grace au xpath passé en paramètre, et t'as plus qu'à suivre les infiormations d'action à effectuer (ici, créer un élément PERSONNE ayant la valeur TOTO dans ton premier élément ElementA du fichier).
 
Tu peux aussi le faire à l'aide d'un xml :


<alter>
  <action type="createElement" xpath="/root/ElementA[0]" elementName="PERSONNE" elementValue="TOTO"/>
</alter>


 
Et de la même façon, tes quelques lignes de PHP n'ont plus qu'à suivre les instructions lues dans le fichier XML.
La solution avec le XML est meilleure dans la mesure où tu peux effecter plusieur actions en une seule fois et le fichier peut aisément être créé à partir d'un autre programme.
 
S'il ne s'agit que de modifier la structure du fichier, alors c'est une DTD ou XSD modifiée qu'il faudra poster. Vu la complexité de ces langages (enfin, moi je trouve que c'est un bien joyeux bordel) à mon avis tu seras obligé de poster tout le nouveau schéma à chaque fois.
 
Le DTD et XSD n'indiquent pas d'informations de valeurs, mais indiquent par exemple que "personne" doit contenir une et une seule balise "nom", et 0 à n balises "voiture" mais 0 à 1 "conjoint" par exemple. Ca ne modifie pas le fichier XML, ça va juste le rendre invalide si par exemple la balise "personne" ne contient pas de balise "nom" ou contient deux balises "conjoint". Ceci dit, c'est un peu lourd à utiliser, et vu que ton schema va changer souvent à priori tu vas te lancer dans un casse-tête chinois à mon avis.


Message édité par MagicBuzz le 24-08-2008 à 19:11:08
n°1776756
MagicBuzz
Posté le 24-08-2008 à 19:21:35  profilanswer
 

/me vient juste de comprendre...
 
bon, donc si j'ai ben compris cette fois :
 
ton "API" sait déjà quels sont les types des éléments à créer.
 
bah...
 
tu crées des fichiers xml genre :
 


<personne>
  <nom/>
  <age/>
</personne>


 
Et tu passes à ton API ceci :
 
api.php?elementType=personne&nom=toto&age=56
 
Et dans ton PHP, avec DOM toujours, tu boucles sur le $_GET afin de récupérer tous les paramètres sans avoir à les connaître à l'avance. Tu localise la balise qui porte le même nom que le paramètre et t'as juste à lui coller la valeur. Eventuellement tu peux complexfier la chose si tu gère des attributs, genre avec des nom de paramètres "adresse@rue=rue%des%fleurs" qui indique que "rue" est l'attribut de "adresse" qui doit prendre valeur "rue des fleurs"

n°1776757
MagicBuzz
Posté le 24-08-2008 à 19:22:22  profilanswer
 

PS : et question con... pourquoi tu ne passes pas par un web service pour faire ça ? t'es un peu en train de tenter de réinventer SOAP là...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  XML/XSL

  XML-XSL => XML, modification d'un fichier XML

 

Sujets relatifs
Force download fichier AVI !Connaître le nombre de lignes dans un fichier
generation d'un arbre au format XMLune application qui se modifie via XML
[résolu]lecture d'un fichier créé [JSP/JAVA]Probleme XML via XMLDom et base Oracle
upload et download d'un fichierJava lenteur ouverture fichier Excel
Where in XMLlecture fichier de données séparés par des tabulations
Plus de sujets relatifs à : XML-XSL => XML, modification d'un fichier XML


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