23Fermer25
SpipuLe 22/01/2008 à 17:46
bon, je ne sais pas si ca va t'aider, mais j'avais ecrit ce bout de code il y a 2-3 ans... on ne sait jamais happy

/////////////////////////////////// // Fonctions de gestion de l'XML // /////////////////////////////////// /* Fonction pour FF pour créer le XML à partir d'un texte */ // txt      : texte à analyser // result   : nom de la variable de sauvegarde du XML chargé (Exemple : "xmlDoc") // fnc_load : nom de la fonction à appeler automatiquement lorsque le chargement est fini (Exemple : "Init") function xmlMake(txt, result, fnc_load) {      var parser = new DOMParser();                                   // création du Parser         zz_xmlDoc = parser.parseFromString(txt,"text/xml");          // indication du texte à parser      if (result)      eval(result+" = zz_xmlDoc");               // sauvegarde du résultat      if (fnc_load)     eval(fnc_load+"()");                         // lancement de la fonction d'initialisation perso } /* Fonction d'appel d'un XML */ // url      : url du fichier XML à charger. (Exemple : "toto.xml.php") // param    : paramètres éventuels (méthode GET, sans le ? au début. (Exemple : "f=9&g=20") // result   : nom de la variable de sauvegarde du XML chargé (Exemple : "xmlDoc") // fnc_load : nom de la fonction à appeler automatiquement lorsque le chargement est fini (Exemple : "Init") function xmlLoad(url, param, result, fnc_load) {      var zz_xhr_object = null;                                                   // Objet contenant le XML      if(window.XMLHttpRequest)                                                  // Si Firefox       {           zz_xhr_object = new XMLHttpRequest();                               // création de l'outil permetant de récuper le contenu text du XML           zz_xhr_object.open("GET", url+"?"+param, true);                // indication de la méthode et du fichier XML           // création de la fonction traitant le texte une fois chargé et créant le XML -> xmlMake           eval("zz_xhr_object.onreadystatechange = function() { if(zz_xhr_object.readyState == 4) xmlMake(zz_xhr_object.responseText, '"+result+"', '"+fnc_load+"'); } ");           // préparation de la requete            zz_xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded");            zz_xhr_object.send("");                                              // envoie de la requete          return true;                                                       // fin -> xmlMake      }      else if(window.ActiveXObject)                                             // Si Internet Explorer       {            var zz_xmlDoc     = new ActiveXObject("Microsoft.XMLDOM");     // création de l'outil premetant de récupérer le DOM du XML          zz_xmlDoc.async = false;                                               // necessaire pour IE           if (typeof zz_xmlDoc!="undefined")                                   // si l'objet est bien défini                zz_xmlDoc.load(url+"?"+param)                                   // => changement du XML               while(zz_xmlDoc.readyState != 4) {};                              // attente du chargement           if (result)      eval(result+" = zz_xmlDoc");                     // sauvegarde du résultat           if (fnc_load)     eval(fnc_load+"()");                              // lancement de la fonction d'initialisation perso          return true;                                                            // fin      }      else                                                                           // sinon      {            if (result)      eval(result+" = null");                          // impossible...              return false;                                                            // fin      } } /* Fonction permetant de renvoyer dans un tableau la structure entière d'un XML */ // xmlNode   : Résultat obtenu grâce à xmlLoad dans result // root_node : noeud principal de départ (obligatoire, exemple : "ROOT", mais surtout pas "xml") // exemple : //<root> // <message> //  <title>titre1</titre> //  <msg>message1</msg> // </message> // <message> //  <title>titre2</titre> //  <msg>message2</msg> // </message> //</root> // // va donner, avec root comme noeud principal : // // liste['message']['length'] = 2 // liste['message'][0]['value'] = null // liste['message'][0]['node']['title']['length']   = 1 // liste['message'][0]['node']['title'][0]['value'] = "titre1" // liste['message'][0]['node']['title'][0]['node']  = null // liste['message'][0]['node']['msg']['length']   = 1 // liste['message'][0]['node']['msg'][0]['value'] = "message1" // liste['message'][0]['node']['msg'][0]['node']  = null // liste['message'][1]['value'] = null // liste['message'][1]['node']['title']['length']   = 1 // liste['message'][1]['node']['title'][0]['value'] = "titre2" // liste['message'][1]['node']['title'][0]['node']  = null // liste['message'][1]['node']['msg']['length']   = 1 // liste['message'][1]['node']['msg'][0]['value'] = "message2" // liste['message'][1]['node']['msg'][0]['node']  = null function xmlReadAll(xmlNode, root_node) {      if (root_node)                xmlNode = xmlNode.getElementsByTagName(root_node)[0];            var notWhitespace = /\S/;      var nbNo2, nom, val, i, n            for (i=0;i<xmlNode.childNodes.length;i++)      {           if ((xmlNode.childNodes[i].nodeType == 3)&&(!notWhitespace.test(xmlNode.childNodes[i].nodeValue)))           {                xmlNode.removeChild(xmlNode.childNodes[i]);                i--;           }      }            var liste = new Array();      var nbNo1 = xmlNode.childNodes.length;            if (xmlNode.firstChild.nodeValue!=null) nbNo1--;      for (i=0;i<nbNo1;i++)      {           nom = xmlNode.childNodes[i].nodeName;           val = xmlNode.childNodes[i].firstChild.nodeValue;           if (!liste[nom])           {                liste[nom] = new Array();                liste[nom]['length'] = 0;           }           n = liste[nom]['length'];           liste[nom][n] = new Array();           liste[nom][n]['value'] = val;                      nbNo2 = xmlNode.childNodes[i].childNodes.length;                 if (val!=null) nbNo2--;           if (nbNo2>0)                liste[nom][n]['node'] = xmlReadAll(xmlNode.childNodes[i], null);           else                liste[nom][n]['node'] = null;                      liste[nom]['length'] = n+1;      }            return liste; }