←back to Blog

Lire un fichier XML en JS sans serveur web !

XMLIl a quelque temps déjà , mon collègue Sebeuh a posté un billet sur l’AJAX.
Enfin pseudo-AJAX disons… vu qu’en fait c’est du javascript synchrone et pas asynchrone ^^

Cf la ligne…
[code lang= »Javascript »]objXMLHTTP.open(« GET », « https://localhost/demo_ajax/eleves.xml », false);[/code]
le paramètre False indique à son objet qu’il désactive le mode asynchrone ;)
Eh oui…

Bref ici, je vais pas vous expliquer comment accéder à un fichier XML (allez sur le blog de Sebeuuh pour cela) mais comment lire un fichier XML sans utiliser un serveur web (Apache ou IIS)

En effet sous Firefox, ça ne pose aucun problème.
L’objet HTTPRequest pouvant fonctionner en local. Cepedant pour Internet Explorer l’objet Microsoft.XMLHTTP et Microsoft.XMLDOM ont besoin d’un serveur web pour fonctionner.

Or dans notre projet .NET supinfo ou dans d’autres cas possible, on ne souhaite pas installer de serveur web. Un exemple d’utilisation pourrait être un site intranet (et encore…)

Donc il fallut trouver un objet ActiveX pour IE pouvant être utilisé en local. Après pas mal de recherche sur le web et sur la documentation MSDN, on (Alex et moi) a trouvé l’objet : Msxml2.DOMDocument
Ce dernier fonctionne en local et est très performant ^^

Pour vous expliquer cela… un exemple fonctionnant en local
Le fichier XML que l’on souhaite chargé se nomme liste.xml

Pour Firefox :
[code lang= »Javascript »]
var mYxmlObject = new XMLHttpRequest(); // Création Objet XMLhttpRequest

mYxmlObject.open(« GET », liste.xml, false); // Methode, lien, asynchrone
mYxmlObject.send(null);

return mYxmlObject.responseXML; // renvoi de l’objet XML
[/code]

Pour ie

[code lang= »Javascript »]
var xmlDoc = new ActiveXObject(« Msxml2.DOMDocument »); //crée un nouvel objet Msxml2.DOMDocument

xmlDoc.async = false; // synchrone
xmlDoc.load(liste.xml); // charge le XML
[/code]

Hum tout cela est bien intéressant, mais quel est l’intérêt ? Une transformation XSLT !!!
La suite au prochain billet ;)

4 réponses à “Lire un fichier XML en JS sans serveur web !”

  1. Avatar de Florian
    Florian

    Tu veux faire du JS high-level ? Ajax Powered ?!

    https://jquery.com/

    Librairie façon Behaviour, Prototype ou autre Scriptaculous, mais en 10kb ! Super simple et très très puissante !

    Florian

  2. Avatar de AmO
    AmO

    On n'a pas forcément besoin d'un JS aussi lourd, quand on veut une seule fonction…

    D'ailleurs dans le cas présent, on n'avait pas le droit d'utiliser de librairie ^^

    Donc….

    Merci pr le lien !

  3. Avatar de Florian
    Florian

    bonjour, j'ai trouvéce billet fort intéressant :) je me demanfdais pourquoi cette précision : 'allez sur le blog de sebeuuh pour cela' … ;) je tte souhaite une bonne continua-ion !

  4. Avatar de Hafid
    Hafid

    Bonjour,

    Je suis un débutant en Ajax. dans le travail que je cherche à faire, j'ai besoin de travailler en local chose que traite cet article.

    Seulement quand j'ai essayé de l'appliquer, le script ne marche pas!

    le script est le suivant:

    //———————————————————–

    function submitForm()

    {

    var req = null;

    document.ajax.dyn.value="Started…";

    if(window.XMLHttpRequest){

    //req = new XMLHttpRequest();

    req = new ActiveXObject("Msxml2.DOMDocument");

    }

    else if (window.ActiveXObject){

    //req = new ActiveXObject(Microsoft.XMLHTTP);

    req = new ActiveXObject("Msxml2.DOMDocument");

    }

    req.onreadystatechange = function()

    {

    document.ajax.dyn.value="Wait server…";

    if(req.readyState == 4)

    {

    if(req.status == 200)

    {

    document.ajax.dyn.value="Received:" + req.responseText;

    }

    else

    {

    document.ajax.dyn.value="Error: returned status code " + req.status + " " + req.statusText;

    }

    }

    };

    //var xmlDoc = new ActiveXObject(”Msxml2.DOMDocument”); //crée un nouvel objet Msxml2.DOMDocument

    req.async = false; // synchrone

    req.load(data.xml); // charge le XML

    //req.load("data.xml"); // charge le XML

    //req.open("GET", "data.xml", true);

    //req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

    //req.send(null);

    }

    //———————————————————–

    Si quelq'un peut m'indiquer oû j'ai commis l'erreur. Merci d'avance.