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