Comportement étrange load XML

Résolu
azwallz Messages postés 2 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 16 septembre 2008 - 16 sept. 2008 à 11:00
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 - 16 sept. 2008 à 13:43
Bonjour,

je rencontre un problème assez étonnant (déroutant) sur un script JS. Je veux charger un fichier XML via JS, le XML est ensuite transformé en tableau pour traitement ultérieur.

j'écris donc après avoir déclaré mes tableaux:
function loadXML(){
    if (document.implementation && document.implementation.createDocument) {
        // pour FF
        docXml = document.implementation.createDocument('','',null);
    }
    else if (window.ActiveXObject){
        // pour IE
        docXml = new ActiveXObject("Microsoft.XMLDOM");
    }
    else {
        alert("éxecution impossible");
    }
    docXml.load("monfichier.xml");
    personne = docXml.getElementsByTagName("nom");
    profil = docXml.getElementsByTagName("profil");
    for(i=0;ialert("un texte quelconque"); juste après mes appels getElementsByTagName() Ô magie ça fonctionne !

Quelqu'un sait pourquoi cela fonctionne comme ça et comment je peux me débarrasser de ce "alert" ?

Merci par avance.

3 réponses

cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 sept. 2008 à 12:48
bonjour,
les histoires d'asynchrone....

            function xmlFin()    //// Xml chargé ////

            {    on peut traiter....    }

            if ( document.implementation && document.implementation.createDocument )

                      {    xmlD = document.implementation.createDocument("", "", null);

                           xmlD.onload = function() {    xmlFin();    }

                      }   

            else     {    xmlD = new ActiveXObject("Microsoft.XMLDOM");   

                            xmlD.onreadystatechange = function ()

                            {    if (xmlD.readyState == 4)    xmlFin(); }

                      }

            xmlD.load("fichier.xml");

indépendamment de la sructure du xml qu'on n'a pas
et qui doit respecter certaines règles
( en le chargeant directement avex un navigateur
  ça signale s'il y a des erreurs ou pas )

CordialementBul[mon Site][M'écrire], <!--
3
azwallz Messages postés 2 Date d'inscription jeudi 19 mai 2005 Statut Membre Dernière intervention 16 septembre 2008
16 sept. 2008 à 13:36
J'avoue que cette notion m'a échappée, je rajoute le code final pour ceux qui, comme moi, cherche a chargé du XML en JS.

Merci à toi Bultez

le XML est formé ainsi:
<?xml version="1.0" encoding="iso-8859-1" ?>
<groupe>
   
        <nom>NOM</nom>
        PROFIL

   

</groupe>

et le source final :
var groupe = new Array();

function xmlFin()



    personne = docXml.getElementsByTagName("nom");

    profil = docXml.getElementsByTagName("profil");

    for(i=0;i        groupe[i]=[personne[i].firstChild.nodeValue,profil[i].firstChild.nodeValue];

    }

}

function loadXML(){

    if ( document.implementation && document.implementation.createDocument ){

        docXml = document.implementation.createDocument("", "", null);

        docXml.onload = function(){

            xmlFin();

        }

    }

    else{  

        docXml = new ActiveXObject("Microsoft.docXmlOM");  

        docXml.onreadystatechange = function (){

            if (docXml.readyState == 4){

                xmlFin();

            }

        }

    }

    docXml.load("monfichier.xml");

}

loadXML();
0
cs_bultez Messages postés 13615 Date d'inscription jeudi 13 février 2003 Statut Membre Dernière intervention 15 octobre 2013 30
16 sept. 2008 à 13:43
avec IE on peut "faire ça" en synchrone,
avec FF... je ne sais pas : mais je n'ai jamais regardé  de près, car il me
       semble qu'il vaut mieux garder le principe de l'asynchrone. ( quoique... )
Cordialement     Bul  [mon Site] [M'écrire], <!--
0
Rejoignez-nous