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.
<?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, '&');
txt = txt.replace(/</g, '<');
txt = txt.replace(/>/g, '>');
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>
La fonction lecture() permet ici de lire un document XML sous la forme d'un objet XMLDocument exploitable par un script.
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é.
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.