Attention : Le contenu de ces pages n'a pas été mis à jour depuis longtemps. Il est probablement obsolète pour Firefox 4.0/Gecko 4.0 et supérieur. Pour du contenu plus récent, allez consulter developer.mozilla.org.

Readdocument

Lecture d'un document DOM

Voici un exemple simple d'un script permettant de lire un document XML ou DOM depuis une adresse chrome:, !http:, ou relative par rapport à l'application elle même.

Le code

 <?xml version="1.0" encoding="ISO-8859-1" ?>
 <?xml-stylesheet href="[[chrome://global/skin/]]" type="text/css"?>
 <window title="Test de lecture d'un document"
         [[xmlns:html="!http://www.w3.org/1999/xhtml]]"
         xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
         >
 <script><![CDATA[
 function lecture(url) {
   //url : adresse chrome:// ou !http://, absolue ou relative
    var baseurl= window.location.toString();
    var uri = Components.classes['@mozilla.org/network/standard-url;1']
             .createInstance(Components.interfaces.nsIURI);
    uri.spec=baseurl;
    //Résolution de l'URL du fichier par rapport à l'URL de la fenêtre de l'application
    var strUrlFichier = uri.resolve(url);
    uri.spec=strUrlFichier;
    //Ouvrir un canal correspondant à cette URL
    var ios = Components.classes['@mozilla.org/network/io-service;1']
             .getService(Components.interfaces.nsIIOService);
    var chann = ios.newChannelFromURI ( uri );
    //Charger le document depuis ce canal
    var domsrv = Components.classes['@mozilla.org/content/syncload-dom-service;1']
                .getService(Components.interfaces.nsISyncLoadDOMService);
    var doc = domsrv.loadDocumentAsXML( chann , uri);
    //doc est un objet XMLDocument
    return doc;
 }
 function rempli() {
  //lance la lecture avec l'URI de la <textbox>
  var doc = lecture( document.getElementById('nom_fichier').value );
  //Récupère un contenu "affichable"
  txt = doc.documentElement.textContent;
  //Affichage du contenu en échappant les caractères xml
  txt = txt.replace(/&/g, '&amp;');
  txt = txt.replace(/</g, '&lt;');
  txt = txt.replace(/>/g, '&gt;');
  document.getElementById('contenu').innerHTML = txt;
 }
 //Propose par défaut l'adresse du document en cours (pour l'exemple)
 window.addEventListener('load',
                         function() {document.getElementById('nom_fichier').value=window.location;},
                         true);
 ]]></script>
 <[[html:h1>Test]] de lecture d'un document</[[html:h1]]>
 <hbox style="overflow: auto;" flex="1">
   <[[html:pre]] id="contenu">...</[[html:pre]]>
 </hbox>
 <hbox>
   <textbox value="..." id="nom_fichier" flex="1"/>
   <button label="Lecture" oncommand="rempli();"/>
 </hbox>
 </window>

Explications

La fonction lecture() permet ici de lire un document XML sous la forme d'un objet XMLDocument exploitable par un script.

Nota bene

L'affichage du document qui est fait ici dans des balises HTML ne sert qu'à montrer rapidement un résultat, mais n'a aucune utilité pour l'exemple proposé.

Commentaires

DamienHardy: Il semble que le problèmes persistent quant à la lecture des fichiers XML contenant des entitées externes (tel que le backend de la tribune de DLFP par exemple)


Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.

Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™ sont des marques de la fondation Mozilla.