Utilisation du DOM et enregistrement de fichier
Bonjour,
Je suis en train de réaliser un gadget Windows qui doit me permettre de stocker dans un fichier XML mon temps de travail par jour. J'éprouve quelques difficultés liées à l'enregistrement du fichier sur le disque, c'est pourquoi je sollicite votre aide. Le langage à utiliser pour parvenir à mes fins est le javascript.
Contrairement à d'habitude, on se focalisera sur un code destiné à internet explorer... voilà où j'en suis, j'explique où je bloque après :
Dans le onload de la page, j'appelle la fonction d'initialisation. Elle permet de créer l'objet qui va parcourir le XML :
Code:
1 2 3 4 5 6 7 8 9 10
|
function init()
{
if (window.ActiveXObject)
{
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
}
xmlDoc.async=false;
xmlDoc.load("C:/statistiquesDeTravail.xml");
} |
Côté HTML, la méthode d'enregistrement est appelée au clique sur un bouton.
Code:
1 2
|
<input class="bouton" type="button" onclick="sauvegarder()" value="Sauvegarder" /> |
voilà la fonction d'enregistrement :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
function sauvegarder()
{
// je vérifie dans un premier temps si le fichier existe déjà. S'il n'existe pas, je le crée
var fso, object;
fso = new ActiveXObject("Scripting.FileSystemObject");
FileExist = fso.FileExists(fichierStockage);
if(!FileExist)
{
// création du fichier
object = fso.CreateTextFile(fichierStockage, false);
// ajout de la trame qui doit servir de contenant pour les différentes informations
object.write("<?xml version='1.0' encoding='UTF-8'?>\n");
object.write("<racine>\n");
object.write("</racine>\n");
}
// on ferme les ressources ouvertes
fso=null;
object.Close();
// on se place sur la racine du document
var noeuds = xmlDoc.getElementsByTagName("racine")[0];
// on crée la nouvelle balise à ajouter au fichier XML
var nouveauTravail = xmlDoc.createElement("travail");
nouveauTravail.setAttribute("ref", jourCourant);
noeuds.appendChild(nouveauTravail);
//
//
// c'est ici qu'il doit manquer quelque chose...
//
//
} |
voilà, maintenant si je fais :
Code:
1 2
|
document.getElementById("graph").innerHTML = noeuds.getElementsByTagName("travail")[0].getAttribute("ref"); |
La div « graph » prend bien la valeur du jour, mais le fichier XML reste désespérément vide... AppendChild doit ajouter le noeud en mémoire, mais pas dans mon fichier. Auriez vous une solution pour réussir à enregistrer ces nouveaux noeuds dans mon fichier ?
J'en profite pour poser une autre question liée et qui doit avoir la même réponse à mon avis : si je fais une modification de noeud existant, je suppose que la modification sera elle aussi faite au niveau mémoire, et qu'il faudra enregistrer à coté, comme pour l'ajout de nouveau noeud ?
Merci beaucoup pour toute l'aide que vous m'apporterez.
Alexandre