Accueil

Exemples DOM

Afficher plein écran
 
Emmanuel Lazinier
Création de la page : 2001-07-17
Dernière mise à jour : 2001-07-20

Cataloguer vos répertoires Windows en XML

Avez-vous jamais rêvé de fabriquer automatiquement la "carte" de votre site Web, ou d'un CD-ROM, ou d'un répertoire quelconque de votre disque dur ? Et d'avoir cette carte sous la forme d'un fichier XML qui puisse être ensuite affiché de toutes les manières possibles, trié, filtré, etc., à volonté ?

Si oui, alors vous pouvez entonner un chant d'allégresse et d'action de grâce à le fée Ixemelle et à son compère le magicien d'Om, car le modeste script présenté ci-dessous fait de votre rêve une réalité.

Ce script n'est pas autre chose que l'adaptation (et la simplification) en Javascript d'un exemple proposé par Microsoft dans son kit de documentation XML SDK 4.0 Technology Preview, à la rubrique XSLT Developer's Guide/Creating Interactive XSLT/Extending XSLT. Il fait appel au FileSystemObject du Windows Scripting Host pour parcourir l'ensemble des répertoires et fichiers contenus dans un répertoire donné, prélever leurs caractéristiques (nom, date de création, taille, chemin, etc.), et enregistrer ces informations sous la forme d'un fichier xml dont l'arborescence (imbrication d'éléments "folder" et "file") reflète celle du répertoire.

Il nécessite MSXML3+.

Il se lance avec trois paramètres :

  1. chemin du répertoire à cataloguer (ex. C:\Temp)
  2. mode de cataloguage (0= répertoires seuls, 1 = fichiers seuls, 2=  répertoires et fichiers)
  3. fichier résultat
/* Cataloguage d'un répertoire (et de ses sous-répertoires) en XML
Paramètres %1 chemin du répertoire à cartographier
%2 mode (0= répertoires seuls, 1 = fichiers seuls, 2 =  répertoires et fichiers)
%3 fichier résultat */

var fs=new ActiveXObject("Scripting.FileSystemObject");
var FoldersOnly=0;
var FilesOnly=1;
var FilesAndFolders=2;

output = getFolder(WScript.Arguments(0),WScript.Arguments(1));
output.save(WScript.Arguments(2));

function getFolder(dirPath,mode) {
        var pi;
        var folder = fs.getFolder(dirPath);
        var xmlDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
        pi = xmlDoc.createProcessingInstruction("xml", "version=\"1.0\" encoding=\"iso-8859-1\"");
        xmlDoc.appendChild(pi);
        pi = xmlDoc.createProcessingInstruction("xml-stylesheet", "type=\"text/xsl\" href=\"affiche.xsl\"");
        xmlDoc.appendChild(pi);  var xmlDoc = new ActiveXObject("Msxml2.FreeThreadedDOMDocument");
        var folderElement = xmlDoc.createElement("folder");
        newElement(folderElement, xmlDoc, folder);
        if (mode==FilesOnly || mode==FilesAndFolders) {
             getFiles(folder,folderElement);
        }
        if (mode==FoldersOnly || mode==FilesAndFolders) {
             getFolders(folder,folderElement,mode);
        }
        return(xmlDoc);
}
 
function getFiles(parentFolder,xmlParent) {
         var e, fileObject, fileElement;
         e = new Enumerator(parentFolder.files); // créer un énumérateur des fichiers
         for (;!e.atEnd();e.moveNext()) // énumérer le collection des fichiers
         {
             fileObject = e.item();
             fileElement=xmlParent.ownerDocument.createElement("file");
             newElement(fileElement, xmlParent, fileObject);
        }
        return(parentFolder.files.count);
}
 
 
function getFolders(parentFolder,xmlParent,mode) {
         var e, folderObject, folderElement;
         e = new Enumerator(parentFolder.subfolders); // créer un énumérateur des sous-répertoires
         for (;!e.atEnd();e.moveNext()) // énumérer la collection des sous-répertoires.
         {
             folderObject = e.item();
             folderElement=xmlParent.ownerDocument.createElement("folder");
             newElement(folderElement, xmlParent, folderObject);
             if (mode==FilesAndFolders) {
                 getFiles(folderObject,folderElement);
             }
            getFolders(folderObject,folderElement,mode);
        }
        return(parentFolder.subfolders.count);
}

function newElement(element, parentElement, sourceObject) {
         element.setAttribute("name",sourceObject.name);
         element.setAttribute("path",sourceObject.path);
         element.setAttribute("dateCreated",sourceObject.dateCreated);
         element.setAttribute("dateLastAccessed",sourceObject.dateLastAccessed);
         element.setAttribute("shortName",sourceObject.shortName);
         element.setAttribute("shortPath",sourceObject.shortPath);
         element.setAttribute("size",sourceObject.size);
         element.setAttribute("type",sourceObject.type);
         parentElement.appendChild(element);
}

Voir/Télécharger les fichiers de l'exemple :

Afficher le catalogue

Avoir un beau fichier XML, c'est bien ; l'afficher joliment, c'est mieux.

Nous vous avons donc concocté un bel ensemble de feuilles de style et de scripts pour faire de la consultation de votre catalogue une expérience plaisante :

Voir/Télécharger les fichiers utilisés pour cet affichagee :



Contribuez ! Faites-nous profiter de vos exemples les plus significatifs.

Retour à la page d'accueil.