Comment manipuler un XML déjà en mémoire via une routine en javascript?

Signaler
Messages postés
3
Date d'inscription
vendredi 19 décembre 2008
Statut
Membre
Dernière intervention
22 décembre 2008
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Voici quelques info sur mon problème:
J'ai un fichier XML qui contient des données et un fichier XSL qui contient le format d'affichage
Le XML référence le XSL. En ouvrant le XML, je lance donc l'affichage du contenu de celui-ci en utilisant le format défini dans le XSL
Dans le XSL, il y a des textarea pour saisir des infos et un bouton qui permet de lancer une fonction en javascript qui est localisée dans un fichier .js référencé dans le XSL

Voici ce que je souhaite faire:
Suite à l'appui sur le bouton, je souhaite enregistrer (via la fonction en javascript) les modifications apportées à mon XML (via les textarea) dans un nouveau fichier XML
Et la je bloque ....

Je n'arrive pas à remonter depuis la fonction en javascript aux noeuds et attribus de mon fichier XML qui est déjà chargé en mémoire...

Je trouve des exemples pour charger un XML en mémoire mais rien pour traiter les données d'un XML déjà en mémoire ...
Est-ce que quelqu'un pourrait m'aider?

5 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
bonjour,

une fois chargé ( et pas de la même manière avec IE et FF ! ),
il te reste à en "balayer" le contenu, avec des
élément où est ce xml.getElementsByTagName('balise')[index].firstChild.nodeValue...
par exemple

>>je souhaite enregistrer (via la fonction en javascript) les modifications apportées à mon XML
je ne sais pas si je vais répondre sans me tromper !
mes essais (  à ce jour ) :
_ avec IE, directement mais il faut un .hta au lieu du .htm
_ avec un .htm, avec IE : utiliser l'activeX fileSystemObject
   et avec FF :  Components.classes["@mozilla.org/file/local;1"]
                        .createInstance(Components.interfaces.nsILocalFile);
   pour la gestion de fichiers texte locaux
   avec les autres navigateurs, ce ne doit pas être possible pour l'instant ?

Cordialement

          [mon Site] [M'écrire] Bul         
Messages postés
3
Date d'inscription
vendredi 19 décembre 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Merci pour ta réponse mais j'ai toujours un problème pour balayer le contenu de mon XML avec Firefox!
Avec IE, j'utilise "source = document.XMLDocument" puis ensuite source.getElementsByTagName('balise') ...
Mais en FF, XMLDocument n'est pas supporté!
Quelle est la syntaxe à suivre pour rechercher mes balises dans le XML qui est déjà chargé en mémoire (donc normalement pas besoin de faire un  "xmlDoc.load("mon fichier.xml");" ?
Je n'ai pas encore regardé la coté sauvegarde dans un fichier ... A suivre
Merci !
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
et comment tu charges le xml avec FF ???

function xmlCharge(fichier)    //// chargement du fichier ////

{    var xmlD;

    if ( document.implementation && document.implementation.createDocument )

            {   xmlD = document.implementation.createDocument('','', null);

                xmlD.onload = function()   

                {    xmlFin(xmlD,xmlD.documentElement.textContent);      }

            }   

    else    {   if ( window.ActiveXObject )

                        {   xmlD = new ActiveXObject('Microsoft.XMLDOM');

                            xmlD.async=true;

                            xmlD.onreadystatechange = function ()

                            {   if ( xmlD.readyState == 4 )

                                {    xmlFin(xmlD,xmlD.xml);    }

                            }

                        }

                else    {    alert('le navigateur ne supporte pas');

                             return false;

                        }

            }

    xmlD.load(fichier);

}

 et dans la function xmlfin :

function xmlFin(quoi,tout)    //// le fichier est chargé ////

{     on utilise     
      quoi.getElementsByTagName('balise')[index].firstChild.nodeValue
      ( et tout c'est... tout )

}

          [mon Site] [M'écrire] Bul         
Messages postés
3
Date d'inscription
vendredi 19 décembre 2008
Statut
Membre
Dernière intervention
22 décembre 2008

Voici des détails:
Config:
Client seul, pas de serveur

Mon XML contient:
?xml version= "1.0" encoding="iso-8859-1"?><?xml-stylesheet  type="text/xsl" href="modelchecker.xsl" ?>
<modelchecker>
   <file check_by ="dzhssg" >
   ....
   </file>
</modelchecker>
= > Il contient le lien vers le XSL en charge de la mise en forme des données à l'écran

Mon fichier modelchecker.xsl contient:

<?xml version ="1.0" encoding= "iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <html>
           <head>
                <title>
                    Static Model Check Report
                </title>
                <script language="javascript" type="text/javascript" src="Script-Modelchecker.js" >
                // attacher le fichier de déclaration du tableau avec les références des livres
                </script>

            </head>
           
                    <xsl:apply-templates select ="modelchecker"/>
           
        </html>
    </xsl:template>
=> Il contient le lien vers des fonctions en javascripts qui me permettent d'agir sur les données affichées, de gérer les données saisie dans certains champs (textarea par ex)

Le script Script-Modelchecker.js contient:

function save_report()
{
    if( window.ActiveXObject)
    { // pour Internet Explorer
        alert('Internet Explorer detecte !')
        source = document.XMLDocument;
        save_function();
    }
    else
    {
        if (document.implementation.createDocument)
        {     // pour FireFox et Consors
            alert('Firefox detecte !')

            EQUIV DE "source = document.XMLDocument;" !!!!!!

            save_function();
        }
        else
        {
            alert('Votre navigateur ne supporte pas le XML !?');
        }
    }
}

function save_function()
{
    var NodeList = source.getElementsByTagName("file")
    for(var i=0; i< NodeList.length; i++){
      alert(i+ ":"+ NodeList(i).nodeName);
    }
 ...
}

Comment cela fonctionne (ou presque):
Le fichier XML est généré par une application, mon but est de visualiser son contenu et de saisir quelques données. En lançant le fichier XML directement via l'explorateur windows, le lien est fait avec le XSL et la mise en page est effectuée directement.
Je me retrouve donc avec à l'écran le contenu du XML formaté par le XSL
Sous IE, via la ligne "source = document.XMLDocument;" je peux pointer sur la structure du XML montée en RAM.
Mon problème est que je n'ai pas trouvé l'équivalent pour FF !
Je n'ai pas besoin d'utiliser la fonction "xmlD.load(fichier)" car mon fichier est déjà chargé en mémoire !

Est-ce que tout est clair maintenant ?
Merci pour votre aide !
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>le lien est fait avec le XSL et la mise en page est effectuée directement.
ben alors.... étudie la page ! c'est du html
ce sera probablement plus simple
de toutes manières le xsl pouvant trier/sélectionner.. et autres joyeusetés
( je ne sais pas si tu fais ? ), mieux veux travailler sur le html
me semble-t-il.
          [mon Site] [M'écrire] Bul