Exemples DOM |
Afficher plein écran |
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 :
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);
}
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 :
Retour à la page d'accueil.