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.

Lire ecrire fichier xml

Lire et modifier un fichier XML local

Voici comment modifier un contenu XML stocké dans un fichier local.

Obtenir le chemin du fichier

Peut être connaissez-vous à partir de votre application le chemin complet du fichier à modifier, auquel cas vous pouvez passer à la section suivante. Mais bien souvent, on ne le connait pas lorsque l'on veut lire ou stocker un fichier dans le profil de l'utilisateur. Voici donc une petite fonction permettant de récupérer le chemin complet d'un fichier qui est dans le profil :

 function getFilePathInProfile(aRelativePath) {
    // on récupère un objet nsIFile qui represente le repertoire du profil
    // de l'utilisateur
    var file = Components.classes["@mozilla.org/file/directory_service;1"]
                      .getService(Components.interfaces.nsIProperties)
                      .get("ProfD", Components.interfaces.nsIFile);
    // on y ajoute le chemin relatif donné
    var path = aRelativePath.split("/");
    for (var i = 0, sz = path.length; i < sz; i++) {
        if (path[i] != "")
            file.append(path[i]);
    }
    return file.path;
 }

Par exemple, imaginons que l'on veuille travailler sur le fichier monappli/datas.xml dans le profil, on appellera alors :

  var fullPath = getFilePathInProfile("monappli/datas.xml");

Lire le document XML

Voici une fonction permettant de lire un fichier XML locale. Elle retourne un objet DOMDocument representant le contenu de ce fichier :

  function readXMLDocument(aPath) {
    // objet representant le fichier à lire
    var file = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(aPath);
    // initialisation d'un flux sur le fichier
    var stream = Components.classes["@mozilla.org/network/file-input-stream;1"]
                         .createInstance(Components.interfaces.nsIFileInputStream);
    stream.init(file, -1, -1, Components.interfaces.nsIFileInputStream.CLOSE_ON_EOF);
    // creation d'un parser DOM,
    var parser = Components.classes["@mozilla.org/xmlextras/domparser;1"]
                         .createInstance(Components.interfaces.nsIDOMParser);
    // generation d'un DOM à partir du flux
    var doc = parser.parseFromStream(stream, null, file.fileSize, "text/xml");
    parser = null;
    stream = null;
    file = null;
    return doc;
 }

Avec cet objet DOMDocument, obtenu, vous pouvez modifier les données, en utilisant les objets DOM habituels. Exemple :

  var fullPath = getFilePathInProfile("monappli/datas.xml");
  var doc = readXMLDocument(fullPath);
  // modifions maintenant le DOM comme on souhaite...
  doc.getElementsByTagName('user')[1].textContent = 'toto';
  var user = doc.createElement('user');
  user.textContent = 'robert';
  doc.documentElement.appendChild(user);

Ensuite, vous sauverez le DOMDocument dans le fichier, comme indiqué ci-après.

Sauvegarder un DOMDocument dans un fichier locale

Voici la fonction permettant de sauver un DOM. On lui livre le DOMDocument, ainsi que le chemin du fichier

 function saveXMLDocument(aDomDoc, aPath) {
    // objet representant le fichier à écrire
    var file = Components.classes["@mozilla.org/file/local;1"]
                .createInstance(Components.interfaces.nsILocalFile);
    file.initWithPath(aPath);
    // initialisation d'un flux sur le fichier
    var stream = Components.classes["@mozilla.org/network/file-output-stream;1"]
                .createInstance(Components.interfaces.nsIFileOutputStream);
    stream.init(file, -1, -1, 0);
    var encoder = Components.classes["@mozilla.org/layout/documentEncoder;1?type=text/xml"]
                   .createInstance(nsIDocumentEncoder);
    encoder.init(aDomDoc, "text/xml", 0);
    encoder.encodeToStream(stream);
    encoder = null;
    stream = null;
    file = null;
 }

Ainsi, en continuant l'exemple précedent, on l'utilisera comme ceci :

   saveXMLDocument(doc, fullPath);

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.