Salut,

Je cherche à lire un fichier XML pour ressortir les valeurs dans un tableau.

Rien de difficile jusqu'ici.

J'ai une fonction servant à lire le XML

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
/**
 * Fonction de manipulation XML en Javascript
 *
 * @param String url : URL du fichier XML
 * @param String handler : Fonction qui traitera le flux XML
 **/
function loadXML(url,handler) {
    //Utilise la technique standard du DOM Niveau 2, si elle est supportée
    if( document.implementation && document.implementation.createDocument ) {
        //Crée un nouvel objet document
        var xmldoc = document.implementation.createDocument( "", "", null );
        //Spécifie ce qui doit arriver après la fin du chargement
        xmldoc.onload = function() { handler(xmldoc, url); }
        //ainsi que l'url à charger
        xmldoc.load(url);               //Commence le chargement
    }
    //Sinon, utilise l'API propriétaire Microsoft pour Internet Explorer
    else if( window.ActiveXObject ) {
        var xmldoc = new ActiveXObject( "Micorosft.XMLDOM" ); //Crée doc
        xmldoc.onreadystatechange = function() { //Spécifie onload
            if( xmldoc.readyState == 4 ) handler(xmldoc);
        }
        xmldoc.load(url);
    }
}
Cette fonction est appelée lors du clic sur un lien (onclick).

Le-dit lien ayant été généré dynamiquement, et IE supportant mal les

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
a.setAttribute('onclick','loadXML("toto","tutu")');
je suis obligé de faire un appendChild d'abord pour ajouter le lien dans ma page, avant de modifier son onclick comme suit:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
document.getElementById('lnk' + unId).onclick = function(){loadXML("pages/rubriques.xml", listeRubriques);}
La fonction listeRubriques, elle, sert à modifier le contenu de la table "tableRubriques", qui au départ ressemble à ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<table>
    <tbody id="tableRubriques">
    </tbody>
</table>
L'id est sur le tbody car IE en rajoute un de manière transparente, et si on laisse l'id sur la table ça provoque des erreurs sous IE.

Voici listeRubriques:

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
/**
 * Construit un tableau HTML des rubriques
 *
 * @param xmldoc : Objet xmldoc renvoyé par xmlLoad()
 **/
function listeRubriques( xmldoc  ) {
    table = document.getElementById('tableRubriques');
 
    //Trouve tous les marqueurs rub du document xmldoc
    var rubriques = xmldoc.getElementsByTagName("rub");
 
    //Boucle à travers les marqueurs Rub
    for( var i = 0 ; i < rubriques.length ; i ++ ) {
        var rub = rubriques[i];
        if( rub.getAttribute("nom") ) {
            var nom = rub.getAttribute("nom");
            var row = document.createElement( "tr" );
            var cell = document.createElement( "td" );
            cell.appendChild(document.createTextNode(nom));
            row.appendChild(cell);
            table.appendChild(row);
        }
    }
}
Elle tourne parfaitement bien sous ffx3, mais pas sous IE7 ou j'obtiens l'erreur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
un composant ActiveX ne peut pas créer d'objet.
Le seul composant activeX que je vois ici serait donc "xmldoc", résultat de "loadXml()" passé en paramètre.

Je n'ai jamais rencontré ce problème et je sèche complètement.

Des idées ?

D'avance merci,

*.Har(d)t

EDIT:

j'ai trouvé une erreur:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 var xmldoc = new ActiveXObject( "Micorosft.XMLDOM" );
au lieu de

Code : Sélectionner tout - Visualiser dans une fenêtre à part
 var xmldoc = new ActiveXObject( "Microsoft.XMLDOM" );
Corrigé, mais maintenant j'ai une nouvelle erreur:

"Cet objet ne gère pas cette propriété ou cette méthode"

Saleté d'IE va !

Je suppose qu'il parle de la ligne

Code : Sélectionner tout - Visualiser dans une fenêtre à part
var rubriques = xmldoc.getElementsByTagName("rub");
mais je suis trop crevé pour m'en occuper ce soir, je rentre à la casa.