IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

parser un XML puis le décharger


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut parser un XML puis le décharger
    Bonjour,

    Mon problème concerne le déchargement d'un fichier XML.

    J'ai un script javascript qui parse du XML et en retire une variable. Le XML reste chargé. Je le vois à la barre de chargement qui reste bloquée. J'aimerais décharger ce fichier XML...Comment faire?

    Voici ci-dessous mon script pour qui ça intéresse.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    function qmlToLookup(fichierXML)
    {
      xmlDoc = document.implementation.createDocument("", "", null);
      xmlDoc.onload = getLookup;
      xmlDoc.load("test3.xml");
      lookup=getLookup();
    }
     
    function getLookup()
    {	
    	//alert("OK");
      var labelss = xmlDoc.getElementsByTagName('symbol');
     
      var labels= xmlDoc.getElementsByTagName('lowervalue');  
      var strokecolors = xmlDoc.getElementsByTagName('outlinecolor');
    	var strokestyles = xmlDoc.getElementsByTagName('outlinestyle');
    	var strokewidths = xmlDoc.getElementsByTagName('outlinewidth');
    	var fillcolors = xmlDoc.getElementsByTagName('fillcolor');
    	var fillpatterns = xmlDoc.getElementsByTagName('fillpattern');
     
       	var lookup = new Object();
     
      for (i=0; i < labelss.length; i++)
      {
      	label=labels[i].firstChild.nodeValue
     
      	outlineColor_red=strokecolors[i].getAttribute('red');
      	outlineColor_green=strokecolors[i].getAttribute('green');
      	outlineColor_blue=strokecolors[i].getAttribute('blue');
      	strokewidth=strokewidths[i].firstChild.nodeValue;
      	fillColor_red=fillcolors[i].getAttribute('red');
    	fillColor_green=fillcolors[i].getAttribute('green');
      	fillColor_blue=fillcolors[i].getAttribute('blue');
     
      	fillPattern=fillpatterns[i].firstChild.nodeValue;
     
      	var outlineColor = RGBtoHex(outlineColor_red,outlineColor_green,outlineColor_blue); 	
      	var fillColor = RGBtoHex(fillColor_red,fillColor_green,fillColor_blue);
     
      	var lookupOptions=new Object();
      	lookupOptions["outlineColor"]=outlineColor;
      	lookupOptions['strokewidth']=strokewidth;
      	lookupOptions['fillColor']=fillColor;
      	lookupOptions['fillPattern']=fillPattern;
     
      	lookup[label]=lookupOptions;
      	document.write(lookup[label].fillColor+"<br>");
      }
      return lookup;  
    }
     
    function RGBtoHex(R,G,B) {return "#"+toHex(R)+toHex(G)+toHex(B)}
    function toHex(N) {
     if (N==null) return "00";
     N=parseInt(N); if (N==0 || isNaN(N)) return "00";
     N=Math.max(0,N); N=Math.min(N,255); N=Math.round(N);
     return "0123456789ABCDEF".charAt((N-N%16)/16)
          + "0123456789ABCDEF".charAt(N%16);
    }

  2. #2
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Je crois déjà qu'il faudrait régler le problème de la ligne Je ne pense pas qu'elle soit nécessaire puisque tu utilise déjà xmlDoc.onload = getLookup;. Et ce n'est pas neutre pour la suite (notamment à cause des document.write).

    ERE

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut
    bonjour et merci pour votre réponse,

    En enlevant lookup=getLookup();, je n'obtiens plus rien en résultat.

    J'ai testé ce que vous m'avez dit avec des fichiers de test qu'il vous est possible de tester:

    Le fichier HTML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
      "http://www.w3.org/TR/html4/strict.dtd">
    <html>
      <head>
        <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
        <title>Get the Lookup from the qml File</title>
        <SCRIPT LANGUAGE="Javascript" src="test.js"></script>
      </head>
      <body id='updateTarget'>
        <p>
          <SCRIPT LANGUAGE="Javascript">      		
          		mavariable=qmlToLookup('test3.xml');
          		alert(lookup);
          </script>
          <div id="test"></div>
        </p>
      </body>
    </html>
    Le fichier js:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function qmlToLookup(fichierXML)
    {
    alert(fichierXML);
      xmlDoc = document.implementation.createDocument("", "", null);
      xmlDoc.onload = getLookup;
      xmlDoc.load("test3.xml");  
      return lookup;
     
    }
     
    function getLookup()
    {	
    	var lookup=32;
    	return lookup;  
    }
    Le fichier XML:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version="1.0" encoding="iso-8859-1"?>
    <symbols>
      <symbol id='ep' added="2003-06-10">
        <lowervalue>E N Cen</lowervalue>
        <outlinecolor red="0" blue="0" green="0" />
          <outlinestyle>SolidLine</outlinestyle>
          <outlinewidth>0.5</outlinewidth>
          <fillcolor red="98" blue="107" green="18" />
          <fillpattern>SolidPattern</fillpattern>
     
      </symbol>
      <symbol id='tse' added="2003-06-20">
        <lowervalue>E N Cenmlml</lowervalue>
        <outlinecolor red="0" blue="0" green="0" />
          <outlinestyle>SolidLine</outlinestyle>
          <outlinewidth>0.5</outlinewidth>
          <fillcolor red="98" blue="107" green="18" />
          <fillpattern>SolidPattern</fillpattern>
      </symbol>
    </symbols>
    Comment rendre mon code plus propre en enlevant cette ligne lookup=getLookup() qui paraît redondante?
    Et comment, par la même occasion, décharger mon fichier XML?

    Merci!

  4. #4
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Salut,

    Déjà note bien que ton code HTML n'est pas valide, au regard de la DTD utilisée: tu ne peux pas mettre de DIV dans une P.

    Ensuite si tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     function qmlToLookup(fichierXML){ 
    ...
      xmlDoc.load("test3.xml");  
    }
    je ne vois plus trop l'intérêt de fichierXML (peut-être est ce un code de test ?).

    Donc finalement ce code de travail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
      "http://www.w3.org/TR/html4/strict.dtd">
    <html>
      <head>
        <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
        <title>Get the Lookup from the qml File</title>
        <script LANGUAGE="Javascript" src="test.js"></script>
        <script language="javascript">
             function load() { 		
                qmlToLookup('test.xml');
             }
        </script>
     
      </head>
      <body id='updateTarget' onload="load()">
        <p>
     
        </p>
        <div id="test"></div>
      </body>
    </html>
    puis (testé avec FF3, note aussi que ton code n'est pas valable avec IE):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    var xmlDoc;
    function qmlToLookup(fichierXML)
    {
      xmlDoc = document.implementation.createDocument("", "", null);
      xmlDoc.onload = getLookup;
      xmlDoc.load(fichierXML);  
     
    }
     
    function getLookup()
    {	
    	alert('fin du chargement');
    	alert(xmlDoc.getElementsByTagName('symbol').length);
    }

    ERE

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut
    bonjour,

    Je vous remercie de vous pencher sur mon problème.

    En fait, je souhaite récupérer le résultat de la fonction qmltoLookup.
    Mais je n'y arrive pas...Le message d'alert ne s'affiche pas.

    Testé avec votre code que j'ai modifié:

    le fichier test.js:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    var xmlDoc;
    function qmlToLookup(fichierXML)
    {
      xmlDoc = document.implementation.createDocument("", "", null);
      xmlDoc.onload = getLookup;
      xmlDoc.load(fichierXML);  
      return test;
     
    }
     
    function getLookup()
    {	
    	var test=2;
    	return test;
    }
    le fichier test.html:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
      "http://www.w3.org/TR/html4/strict.dtd">
    <html>
      <head>
        <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type">
        <title>Get the Lookup from the qml File</title>
        <script LANGUAGE="Javascript" src="test.js"></script>
        <script language="javascript">
             function load() { 		
                test2=qmlToLookup('test.xml');
                alert(test2);
             }
        </script>
     
      </head>
      <body id='updateTarget' onload="load()">
        <p>
     
        </p>
        <div id="test"></div>
      </body>
    </html>
    Comment récupérer le résultat de la fonction?
    La seule solution que j'avais trouvée avait été d'inclure cette ligne
    var test=getLookup();
    mais vous aviez dit que ce n'était pas nécessaire.

    Pour l'instant je n'ai trouvé aucune autre issue. Mon code Javascript n'est ptet pas bien formulé..

    Si vous avez des pistes...

    merci!

    Mathieu

  6. #6
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    En fait, je souhaite récupérer le résultat de la fonction qmltoLookup.
    Tu ne peux pas, le chargement est asynchrone, donc ta fonction se termine que le fichier n'est pas chargé.

    C'est pour cela qu'on passe par une fonction de callback.

    ERE

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    465
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 465
    Points : 287
    Points
    287
    Par défaut
    Merci pour votre réponse!

    Pourtant si dans la fonction getlookup, je mettais
    var test=qmltolookup();
    je récupérais bien la valeur...

    Une piste pour récupérer une variable résultat du parsing de mon XML?

    Merci!

  8. #8
    Expert confirmé
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Points : 4 045
    Points
    4 045
    Par défaut
    Citation Envoyé par mathieu_r Voir le message
    Merci pour votre réponse!

    Pourtant si dans la fonction getlookup, je mettais
    var test=qmltolookup();
    je récupérais bien la valeur...

    Une piste pour récupérer une variable résultat du parsing de mon XML?

    Merci!
    C'est la fonction getLookup() qui est déclenchée dès que le parsing est fini. Donc tu peux dans cette fonction utiliser xmlDoc pour faire ce que bon te semble.

    ERE

Discussions similaires

  1. [C#] Parser du XML
    Par karl3i dans le forum Windows Forms
    Réponses: 5
    Dernier message: 27/02/2009, 09h46
  2. [DOM] Parser un XML
    Par Zapan dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 02/12/2005, 11h41
  3. [DOM XML] Comment parser du XML avec une version 4.3 ?
    Par ouioui2000 dans le forum Bibliothèques et frameworks
    Réponses: 7
    Dernier message: 18/10/2005, 15h52
  4. [FLASH MX2004] Parser un XML en action script
    Par jejeman dans le forum Flash
    Réponses: 6
    Dernier message: 20/09/2005, 17h25
  5. [XSL] Parser fichier xml : erreurs + incompréhensions
    Par totobouchon dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 19/07/2005, 15h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo