[XML] Modification dynamique de page xml

Modification dynamique de page xml [XML] - XML/XSL - Programmation

Marsh Posté le 22-05-2004 à 10:37:02    

Bonjour a tous!
Voila je vous explique mon pb...
alors voila ce que je voudrais faire c'est de la modification dynamique de mes pages xml via xsl
Voila la structure de mes pages :  
- j'ai une page html dans laquelle je rentre le mot que je veux supprimer ou ajouter
 
- j'ai un fichier auquel je fais appel qui est du javascript pour dire que je fais une modif
 
- j'ai un fichier xml qui me cherche le mot (dans le cas de la suppression) et qui normalement devrait faire le traitement necessaire pour la modification
 
Bon en fait je pense qu'il faudrait que je re-crée ma page xml grace a une autre page xml qui elle meme est appellée par mon fichier javascript. Et en fait je sais pas le faire... :sweat:  
Peut etre que vous connaissez des moyens plus facile pour faire cette modification dynamique. Ou peut etre tout simplement vous savez resoudre mon pb... :D
En tous les cas merci d'avance.
 
P.S. si j'ai pas été clair hésitez pas a la dire j'essaierai de l'etre plus :D

Reply

Marsh Posté le 22-05-2004 à 10:37:02   

Reply

Marsh Posté le 25-05-2004 à 10:26:46    

euh...
 
Je ne comprends pas ca :
 
"j'ai un fichier xml qui me cherche le mot (dans le cas de la suppression) et qui normalement devrait faire le traitement necessaire pour la modification "
 
Mais si j'ai compris l'emsemble, tu aimerais modifier un fichier XML a partir de code JS ?


Message édité par Eugt le 25-05-2004 à 10:27:32
Reply

Marsh Posté le 26-05-2004 à 12:40:41    

Eugt a écrit :

euh...
 
Je ne comprends pas ca :
 
"j'ai un fichier xml qui me cherche le mot (dans le cas de la suppression) et qui normalement devrait faire le traitement necessaire pour la modification "
 
Mais si j'ai compris l'emsemble, tu aimerais modifier un fichier XML a partir de code JS ?


 
en gros oui.
 
pour la phrase que tu comprends pas, en fait je veux dire que mon js fait appel a un fichier xml qui, lui, cherche dans le fichier à modifier le mot que je veux modifier. (J'espere que c'est plus clair mais j'ai des doutes  :sweat: )

Reply

Marsh Posté le 27-05-2004 à 17:26:26    

C'est pas spécialement plus clair : Le XML, il fait rien du tout, c'est un fichier qui contient des données...
 
Par contre, si tu veux dire que ton JavaScript effectue une recherche sur un mot contenu dans un des champs de ton fichier xml, et que tu veux modifier le contenu de ce champ, alors, plusieurs possibilités s'offrent à toi, donc celles-ci :
 
1. Tu créer un XSLT qui va te générer un nouveau fichier XML à partir de l'ancien, fichier identique en tout point sauf pour le champ que tu veux modifier.
 
ou
 
2. Tu créer un script qui modifie directement ton fichier XML, style un script en php.


Message édité par ucl-madcow le 27-05-2004 à 17:27:10
Reply

Marsh Posté le 28-05-2004 à 08:41:17    

ucl-madcow a écrit :

C'est pas spécialement plus clair : Le XML, il fait rien du tout, c'est un fichier qui contient des données...
 
Par contre, si tu veux dire que ton JavaScript effectue une recherche sur un mot contenu dans un des champs de ton fichier xml, et que tu veux modifier le contenu de ce champ, alors, plusieurs possibilités s'offrent à toi, donc celles-ci :
 
1. Tu créer un XSLT qui va te générer un nouveau fichier XML à partir de l'ancien, fichier identique en tout point sauf pour le champ que tu veux modifier.
 
ou
 
2. Tu créer un script qui modifie directement ton fichier XML, style un script en php.


 
Héhé je me rend compte que j'ai pas été clair du tout :D
En fait c'est le 1èrement que je souhaite faire... mais la j'ai un pb... Pour etre plus clair, je vais mettre mon code : ça c'est mon fichier javascript :  
 
 var xslDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument" );
 var xmlDoc = new ActiveXObject("Msxml2.DOMDocument" );
 xslDoc.async = false;
 xslDoc.load("liste.xsl" );  
 xmlDoc.validateOnParse = false;
 xmlDoc.load("page_moteur_recherche.xml" );
 var xslt = new ActiveXObject("Msxml2.XSLTemplate" );
 xslt.stylesheet = xslDoc;
 var xslProc = xslt.createProcessor();
 xslProc.input = xmlDoc;
 
   function recherche()  
   {
     xslProc.addParameter("ref", form1.code.value);
     xslProc.transform();
     nfig.innerHTML = xslProc.output;
   }
 
 
et il fait donc appel a mon fichier xml qui lui des qu'il trouve le mot tapé en entrée serait cencé recréer le xml initial... Mais en fait c la ou y a le pb... parce que j'arrive a trouver le mot que je cherche mais pas a recréer le fichier xml...
 
P.S. le code javascript est pas de moi...  :whistle:  :sweat:  
 
P.P.S. en fait pour le 2ement, je connais pas du tout le php (grave erreur  :(  :pfff: ) donc je peux pas faire ça de cette façon... sinon d'apres ce que j'ai pu en lire, ça aurait été plus facile :sweat:
 
 
EDIT : nan en fait c'est directement le fichier xml qui serait cencé modifier l'autre fichier xml qui ne fonctionne pas... vous auriez pas un squelette de fichier xml qui saurait faire ça?


Message édité par -Jc- le 28-05-2004 à 08:44:13
Reply

Marsh Posté le 28-05-2004 à 12:17:39    

Pas un fichier XML ! Un fichier XSL...
 
Résumons :  
- Un fichier XML contient des données...
- Un fichier XSL contient des informations pour transformer ton fichier XML en un autre fichier (xml, html, pdf, rtf, wap, ...)
 
Donc, ce qu'il te faut, c'est un fichier XSLT qui réécrive ton fichier XML tel quel, sauf pour l'entrée qui correspond au mot que tu veux remplacer, où, dans cette condition, il remplace l'ancienne valeur par la nouvelle.  
 
Et comme il n'est pas possible (ou pas idéal ?) d'écrire directement le fichier xml de sortie sur celui qui te sert d'entrée (le serpent qui se mange la queue), tu dois donc faire un script qui :  
 
1. Execute une XSLT sur ton fichier XML, avec les paramètres adéquats.
2. Ecrase l'ancien fichier XML (source) avec le fichier XML généré.
 
Maintenant, c'est dit dans le cadre de AFAIK. Ptet qu'il y a de meilleurs solutions, je n'ai pas les meilleurs connaissances du monde en XML/XSLT..

Reply

Marsh Posté le 28-05-2004 à 12:18:46    

Maintenant, si tu veux, tu peux considérer que ton fichier XSLT est XML compliant, mais bon, te mélanges pas les pinceaux. La phylosophie de nommage, c'est quand tu comprendras mieux... :D

Reply

Marsh Posté le 28-05-2004 à 12:20:24    

Et pour le Php, c'est pas compliqué à comprendre. Mais l'approche est différente..

Reply

Marsh Posté le 29-05-2004 à 10:37:24    

ucl-madcow a écrit :

Pas un fichier XML ! Un fichier XSL...
 
Résumons :  
- Un fichier XML contient des données...
- Un fichier XSL contient des informations pour transformer ton fichier XML en un autre fichier (xml, html, pdf, rtf, wap, ...)
 
Donc, ce qu'il te faut, c'est un fichier XSLT qui réécrive ton fichier XML tel quel, sauf pour l'entrée qui correspond au mot que tu veux remplacer, où, dans cette condition, il remplace l'ancienne valeur par la nouvelle.  
 
Et comme il n'est pas possible (ou pas idéal ?) d'écrire directement le fichier xml de sortie sur celui qui te sert d'entrée (le serpent qui se mange la queue), tu dois donc faire un script qui :  
 
1. Execute une XSLT sur ton fichier XML, avec les paramètres adéquats.
2. Ecrase l'ancien fichier XML (source) avec le fichier XML généré.
 
Maintenant, c'est dit dans le cadre de AFAIK. Ptet qu'il y a de meilleurs solutions, je n'ai pas les meilleurs connaissances du monde en XML/XSLT..


 
oué pardon c'est ce que je voulais dire... mon pb se situe au niveau de mon fichier xsl...
En voila un bout :
 
<xsl:template match="racine">
 
 <xsl:variable name="nombre">
           <xsl:value-of select="count(//motscles[@ref=$ref])"/>
 </xsl:variable>
 
  <xsl:choose>
  <xsl:when test="$nombre>=1">
     <xsl:apply-templates select="//motscles[@ref=$ref]"/>
  </xsl:when>
  <xsl: otherwise>
  <div>il n'y a pas de page contenant ce mot-clés</div>
  </xsl: otherwise>
  </xsl:choose>
 
</xsl:template>
 
 
<xsl:template match="motscles">
 <xsl:if test="@ref=$ref">
  <xsl:value-of select="."/>
 </xsl:if>
</xsl:template>
</xsl:template>
 
en fait ce dont je ne suis pas sur c'est ce qu'il faut faire apres avoir matcher le mot... En bref ici si j'entre dans cette balise : <xsl:if test="@ref=$ref"> je lui fait faire un copy-of mais il va rien me sortir... comment je peux lui dire tu me fais le copy-of dans un nouveau fichier xml qui se nomme toto.xml... (sachant que l'ancien fihier que je voulais modifier s'appelle toto.xml)


Message édité par -Jc- le 29-05-2004 à 10:37:58
Reply

Marsh Posté le 01-06-2004 à 09:39:17    

Bon, à premiere vue, dans ton code, il y a deux choses qui m'intriguent :
 
1. Il y a deux fois </xsl:template> à la fin, pour une seule ouverture. (Théoriquement, il devrait te sortir une erreur, j'en déduis que c'est une faute de frappe...)
2. Pourquoi tu fais encore un test sur la référence puisque ta template n'est exécuté que dans le cas où ce test est vrai ?  
 
En gros ce que tu lui dis c'est :  
- S'il y a des noeuds où l'attribut 'ref' est égal à $ref (tiré d'où la valeur de $ref ? Je ne vois pas dans ton script d'où elle vient...)
- Alors tu appliques la template motscles pour tous les cas où 'ref' = $ref
- Et dans cette template tu lui reprécises : N'affiches la valeur que si 'ref'=$ref ce qui est vrai dans tous les cas, vu ta condition d'entrée.
 
Ensuite, je ne comprends pas bien le but de ton histoire. Ce que tu m'affiches comme script n'as pas comme résultat de sortir un fichier xml identique à l'entrée.
Pour faire quelque chose comme ca, tu dois faire un script qui utilise la récursivité pour réécrire ton arbre de départ...
Si tu veux plus d'infos, je te conseil d'aller demander des infos sur www.developpez.net, il y a un forum traitant du XML/XSLT...


Message édité par ucl-madcow le 01-06-2004 à 10:37:57
Reply

Marsh Posté le 01-06-2004 à 09:39:17   

Reply

Marsh Posté le 01-06-2004 à 09:42:13    

D'ailleur, tu ferais mieux de remplacer ton when par un if, de sortir "apply-templates" de ta condition, et d'utiliser ton if de maniere inverse ("Dans le cas où il n'y a pas de résultats ==> Fait ca : Afficher "Il n'y a pas de mots clefs" ).
 
Parce que, de nouveau, tu retestes plusieurs fois les memes conditions, c'est pas très optimisé...

Reply

Marsh Posté le 01-06-2004 à 21:10:12    

ucl-madcow a écrit :

Bon, à premiere vue, dans ton code, il y a deux choses qui m'intriguent :
 
1. Il y a deux fois </xsl:template> à la fin, pour une seule ouverture. (Théoriquement, il devrait te sortir une erreur, j'en déduis que c'est une faute de frappe...)
2. Pourquoi tu fais encore un test sur la référence puisque ta template n'est exécuté que dans le cas où ce test est vrai ?  
 
En gros ce que tu lui dis c'est :  
- S'il y a des noeuds où l'attribut 'ref' est égal à $ref (tiré d'où la valeur de $ref ? Je ne vois pas dans ton script d'où elle vient...)
- Alors tu appliques la template motscles pour tous les cas où 'ref' = $ref
- Et dans cette template tu lui reprécises : N'affiches la valeur que si 'ref'=$ref ce qui est vrai dans tous les cas, vu ta condition d'entrée.
 
Ensuite, je ne comprends pas bien le but de ton histoire. Ce que tu m'affiches comme script n'as pas comme résultat de sortir un fichier xml identique à l'entrée.
Pour faire quelque chose comme ca, tu dois faire un script qui utilise la récursivité pour réécrire ton arbre de départ...
Si tu veux plus d'infos, je te conseil d'aller demander des infos sur www.developpez.net, il y a un forum traitant du XML/XSLT...


 
Pour le 1, c'est effectivement une faute de frappe :D
et pour le 2 et bien je viens de me rendre compte que tu as tout a fait raison... (suis trop un imbécile :D) bon je vais changer tout ça et voir ce que ça donne... pour ce qui est du forum je te remercie je vais aller y faire un tour, desfois qu'il y ait la reponse a mon script foireux  :sweat:  :D
 
Enfin pour le if (cf ton message suivant), tu as encore raison... :D bon bein je te remercie beaucoup de ton aide!!! je vais changer tout ça!!! Merci encore!!! :hello:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed