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

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

(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 ..

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

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 556
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
Comme 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

Merci d'avance.