Bonjour à tous,
Tout d'abord je tiens à dire que j'ai fait de nombreuses recherches sur ce forum çi et ailleurs pour tenter de résoudre mon problème. En vain
Voilà donc le problème ..
J'utilise Javascript afin de faire du XSLT côté client. Je charge le fichier XML, le fichier XSL puis javascript procède à la transformation et intègre son résultat dans un div.
Aucun problème lorsque je n'effectue qu'une transformation par page.
Par contre, lorsque j'effectue 2 transformations dans une même page (mais dans 2 div différents), j'ai un problème sous firefox (et sous firefox uniquement, aucun problème sous IE).
En effet, seule la 2ième transformation est réalisée ..
J'ai donc un div vide et l'autre qui contient le résultat attendu.
Voilà le code html (simplifé bien sûr) :
Donc le résultat est que si je fais une seule transformation, aucun problème, si j'en fais 2 seule la dernière est faite (sous firefox).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <body onload="javascript:Transform('xml.php?d=menu', 'xsl.php?d=menu', 'menuPage'); Transform('xml.php?d=contenu', 'xsl.php?d=contenu', 'contenuPage');"> <div id="menuPage">Menu de la page</div> <div id="contenuPage">Contenu de la page</div>
(xml.php et xsl.php servant bien sûr à générer du contenu xml et des feuilles de style xsl.)
Et voilà la fonction Transform et tout ce qui va avec ..
Voilà, désolé de livrer autant de code d'un coup, c'est indigeste .. mais étant donné que je ne sais pas du tout d'où vient l'erreur, je suis bien obligé de tout donner
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 // platformMoz: http://www.mozilla.org/projects/xslt/js-interface.html // platformIE6: http://www.perfectxml.com/articles/xml/XSLTInMSXML.asp var platformMoz = (document.implementation && document.implementation.createDocument); var platformIE6 = (!platformMoz && document.getElementById && window.ActiveXObject); var noXSLT = (!platformMoz && !platformIE6); var msxmlVersion = '3.0'; var urlXML; var urlXSL; var docXML; var docXSL; var target; var cache; var processor; var i; if (platformIE6) { // TODO... find out version of MSXML installed cache = new ActiveXObject('Msxml2.XSLTemplate.' + msxmlVersion); } function SetTarget(id) { target = document.getElementById(id); } function SetInput(url) { urlXML = url; } function SetStylesheet(url) { urlXSL = url; } function FatalError() { alert("Sorry, this doesn't work in your browser"); } function CreateDocument(isXsl) { var doc = null; if (platformMoz) { if (!isXsl) doc = document.implementation.createDocument('', '', null); else { doc = document.implementation.createDocument("http://www.w3.org/1999/XSL/Transform","stylesheet",null); } } else if (platformIE6) { doc = new ActiveXObject('Msxml2.FreeThreadedDOMDocument.' + msxmlVersion); } return doc; } function Transform(fichierXML, fichierXSL, divCible) { SetTarget(divCible); SetInput(fichierXML); SetStylesheet(fichierXSL); if (noXSLT) { FatalError(); return; } docXML = CreateDocument(false); docXSL = CreateDocument(true); if (platformMoz) { docXML.addEventListener('load', DoLoadXSL, false); docXML.load(urlXML); } else if (platformIE6) { docXML.async = false; docXML.load(urlXML); docXSL.async = false; docXSL.load(urlXSL); DoTransform(); } } function DoLoadXSL() { if (platformMoz) { docXSL.addEventListener('load', DoTransform, false); docXSL.load(urlXSL); } } function DoTransform() { if (platformMoz) { processor = new XSLTProcessor(); processor.importStylesheet(docXSL); var fragment = processor.transformToFragment(docXML, document); while (target.hasChildNodes()) target.removeChild(target.childNodes[0]); target.appendChild(fragment); } else if (platformIE6) { cache.stylesheet = docXSL; processor = cache.createProcessor(); processor.input = docXML; processor.transform(); target.innerHTML = processor.output; } }
Le dernier point, c'est le log apache lors de la visite de la page :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Sous IE [26/Apr/2006:10:27:48 +0200] "GET /test/xml.php?d=menu HTTP/1.1" 200 265 [26/Apr/2006:10:27:48 +0200] "GET /test/xsl.php?g=menu HTTP/1.1" 200 699 [26/Apr/2006:10:27:49 +0200] "GET /test/xml.php?d=contenu HTTP/1.1" 200 190 [26/Apr/2006:10:27:49 +0200] "GET /test/xsl.php?g=contenu HTTP/1.1" 200 556Comme vous pouvez le voir, il y a une erreur de chargement sous Firefox .. j'ai beau tourner et retourner le code dans tous les sens, je ne comprend pas d'où elle vient .. besoin d'aide
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 Sous Firefox [26/Apr/2006:10:41:15 +0200] "GET /test/xml.php?d=menu HTTP/1.1" 200 265 [26/Apr/2006:10:41:15 +0200] "GET /test/xml.php?d=contenu HTTP/1.1" 200 190 [26/Apr/2006:10:41:15 +0200] "GET /test/xsl.php?g=contenu HTTP/1.1" 200 556 [26/Apr/2006:10:41:15 +0200] "GET /test/xsl.php?g=contenu HTTP/1.1" 200 556
Merci d'avance.
Partager