Page 1 sur 1

xml+xslt+javascript = erreur d'affichage

Publié : 07 août 2006, 19:07
par le thécaire
Bonjour à tous,

Je pioche sur un problème récurrent d'affichage : il s'agit de faire afficher la date de mise à jour d'un fichier (une page web http://www.bibliotheques.uqam.ca/recher ... nables.xml listant les bases de données incontournables en sociologie) dans le bas de la page web à droite. Je fais faire des transformations XSLT sur des fichiers XML côté client : j'ai mis le javascript (qui génère la date de mise à jour) dans la feuille XSLT. Dans IE ça fonctionne, la date s'affiche. Dans FX la date ne s'affiche pas.
J'ai essayé de mettre le javascript dans un fichier à part : ça ne fonctionne toujours pas. J'ai aussi essayé de mettre le code dans des sections CDATA, fonctionne toujours pas. Enfin j'ai pris le HTML généré par la feuille XSLT, j'ai un crée un fichier HTML et ça fonctionne dans FX...
On dirait que le problème vient de FX : il semble incapable de traiter du javascript intégré dans du XSLT.

Vous pouvez jeter un coup d'oeil sur la feuille XSLT ici. http://www.bibliotheques.uqam.ca/xml/co ... es_xsl.txt

Quelqu'un peu m'aider ?

Merci !

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6

Publié : 08 août 2006, 02:53
par lpgc
bonjour, :D

pas facile, ... pas trouvé en enier, ... vraiment besoin des pros de Geckozone

En résume :
<xsl:comment>
</xsl:comment>
ne permet pas sous Firefox d'interpréter du javascript
Il faut leur préférer :
<![CDATA[
]]>
et remplacer : if (fyear < 2000) par if (fyear < 2000)

de plus, gros problème : Firefox n'interprète pas lors d'une transformation le code JS : document.write
Il faut remplacer cela par un SPAN et innerHTML

Mais où je bloque ce matin (2:55) c'est sur le javascript : document.lastModified
qui fonctionne très bien dans une page normale
mais plus du tout dans la transformation

voilà le code que j'ai trouvé pour le moment :

Code : Tout sélectionner

<div>
	<p >
		©2006 Service des bibliothèques<br/>
		<span id="dtmodified"> </span>
	</p>
</div>
        <script language="JavaScript" type="text/javascript">
<![CDATA[
var days = new Array(8);
days[1] = "dimanche";
days[2] = "lundi";
days[3] = "mardi";
days[4] = "mercredi";
days[5] = "jeudi";
days[6] = "vendredi";
days[7] = "samedi";
var months = new Array(13);
months[1] = "01";
months[2] = "02";
months[3] = "03";
months[4] = "04";
months[5] = "05";
months[6] = "06";
months[7] = "07";
months[8] = "08";
months[9] = "09";
months[10] = "10";
months[11] = "11";
months[12] = "12";
var dateObj = new Date(document.lastModified)
var wday = days[dateObj.getDay() + 1]
var lmonth = months[dateObj.getMonth() + 1]
var date1 = dateObj.getDate()
var fyear = dateObj.getYear()
if (fyear < 2000) 
  fyear = fyear + 1900;
// document.write("Mise à  jour  " + "le " + date1 + "-" + lmonth + "-" + fyear)
document.getElementById("dtmodified").innerHTML="Mise à  jour  " + "le " + date1 + "-" + lmonth + "-" + fyear;
]]>
</script>
qui donne sous IE
©2006 Service des bibliothèques
Mise à jour le 8-08-2006

et sous Firefox
©2006 Service des bibliothèques
Mise à jour le 1-01-1970 :?:

A+
Christian


Message envoyé avec : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Re: xml+xslt+javascript = erreur d'affichage

Publié : 08 août 2006, 03:25
par Nucleos
le thécaire a écrit : j'ai mis le javascript (qui génère la date de mise à jour) dans la feuille XSLT. Dans IE ça fonctionne, la date s'affiche. Dans FX la date ne s'affiche pas.
Prologue : je n'y connais (presque) rien à JavaScript.

Alors j'ai fait un test (avant de me coucher) pour un peu éclaircir le problème. Si par exemple tu testais le JavaScript seul ? Moi je n'ai pas réussi à lui faire afficher quoi que ce soit...

Je pense que Firefox sait très bien (sans doute mieux que IE) se débrouiller avec des transformations XSLT, mais pas très bien avec du JavaScript qu'il ne comprend pas à la base !

Publié : 08 août 2006, 08:55
par lpgc
bonjour, :D
Si par exemple tu testais le JavaScript seul ?
:idea: En modifiant if (fyear < 2000) :wink:
Cordialement
Christian

PS. En fait LE SEUL problème restant est :
:?: Comment récupérer en javascript le :
document.lastModified lors d'une transformation XSL DANS Firefox
( c'est sûrement une autre syntaxe mais je ne connais pas bien Firefox )

Message envoyé avec : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)

Publié : 08 août 2006, 15:52
par Invité
lpgc a écrit : Il faut leur préférer :
<![CDATA[
]]>
et remplacer : if (fyear < 2000) par if (fyear < 2000)

de plus, gros problème : Firefox n'interprète pas lors d'une transformation le code JS : document.write
Il faut remplacer cela par un SPAN et innerHTML
:shock: Holà ! j'peux me permettre de te demander où tu as trouver ça ? j'suis très débutant dans le JS et toutes les sources m'intéressent.
lpgc a écrit : Mais où je bloque ce matin (2:55) c'est sur le javascript : document.lastModified
qui fonctionne très bien dans une page normale
mais plus du tout dans la transformation

voilà le code que j'ai trouvé pour le moment :
Fantastique, ça fonctionne... Effectivement il affiche la date zéro.
( c'est sûrement une autre syntaxe mais je ne connais pas bien Firefox )
TK tu en connais certaines particularités... chapeau

Merci beaucoup Salamandre. Je vais continuer sur la piste de la propriété lastmodified.

pierre

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.0.6) Gecko/20060728 Firefox/1.5.0.6

Publié : 08 août 2006, 19:18
par lpgc
bonjour, :D
Où on peut trouver cela ? ... A vrai dire partout sur le Net c'est très facile à trouver :D

voici 2 adresses :
http://www.w3schools.com/xml/xml_cdata.asp
et
http://en.wikipedia.org/wiki/Client-side_JavaScript

chez moi çà fonctionne très bien sous IE et Firefox
http://www.lpgc.be/tutor/xsl/lastmodified.htm

si c'est pour essayer dans une page seule il faut en plus mettre // devant les balises :
//<![CDATA[
//]]>
En fait je pense que sous cette forme c'est valable aussi pour le xslt mais j'ai pas essayé.

:roll: Je suis très certainement aussi débutant que vous en programmation Web et sur ce Forum :
Salamandre est un indicateur qui correspond au nombres de messages postés
et lpgc est mon pseudo :wink:

Cordialement, :D
Christian

PS. Par contre si vous trouvez la solution, en plus de l'auteur de cet article, elle m'intéresse également :D :D



Message envoyé avec : Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322)