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
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
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:
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:
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:
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 :
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:
var xmldoc = new ActiveXObject( "Micorosft.XMLDOM" );
au lieu de
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
var rubriques = xmldoc.getElementsByTagName("rub");
mais je suis trop crevé pour m'en occuper ce soir, je rentre à la casa.
Partager