Condition pour parser du xml [Résolu]

Signaler
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008
-
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
-
Bonjour à tous,
Je suis à mi chemin entre débutant et intermédiaire en JAVSCRIPT. :D
J'ai un fichier xml généré avec dom qui ressemble à ça:

<zone>
   
    <nom></nom>
   
       
        <nom></nom>
       
   

   
       
        <nom></nom>
       
   

   
       
        <nom></nom>
       
   

</zone>

ETC..avec d'autre zone qui contienent plusieurs pays.

Ainsi j'ai une fonction qui prend en paramètre l'ID d'une zone spécifique.
Je voudrais pouvoir récupéré les infos de cette zone (c'est à dire son nom) mais aussi toute les infos de ses pays  (id, nom, image) et seulement pour cette zone  :euh:

Quelqu'un pourrais m'aider ? :-°

17 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ton erreur est ailleurs... probablement.



<hr size= "2" width="100%" />
       le xml

<zones>
     <zone>
         4
        <name>exemple_zone</name>
        <network>
            11
            <name>exemple</name>
            exemple.gif

        </network>
    </zone>
</zones>

<hr size ="2" width= "100%" />
       le htm

<html>

<script type="text/javascript">
     var xml;
    if ( document.implementation.createDocument ){
        xml = document.implementation.createDocument("", "", null);
    }else{
        xml = new ActiveXObject("Microsoft.XMLDOM");
    }
    xml.async=false;
    xml.load("zone.xml");
    var zones = xml.getElementsByTagName("zones")[0];
    for ( var i=0 ; i<zones.getElementsByTagName("zone").length ; i++ )
    {    var zone = zones.getElementsByTagName("zone")[i];
        var zone_id = zone.getElementsByTagName("id")[0].firstChild.data;
        if(zone_id == 4)
        {    var test ="";
            for ( var k=0 ; k<zone.getElementsByTagName("network").length ; ++k )
            {    var network = zone.getElementsByTagName("network")[k];
                var network_id = network.getElementsByTagName("id")[0].firstChild.data;
                var network_name = network.getElementsByTagName("name")[0].firstChild.data;
                var network_pic = network.getElementsByTagName("picture")[0].firstChild.data;
                test += ("Pour la zone :" + zone_id +"-----ID:" + network_id + "----NAME:" + network_name + "----PICTURE:" + network_pic +"
");
                alert(test);
            }

        }
    }
</script>

</html>



<hr size="2" width="100%" />


IE et FF affichent "tout bien"
    donc... vérifier l'appel, l'endroit où est mis le résultat ( pour le test j'ai mis un alert ) ...
    et :








o~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~o 
| Avec | et mieux : <label style ="color: rgb(0, 128, 0);">Télécharger</label> | 
|~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~| 
|<label style="color: rgb(128, 0, 0);">FireFox</label> |regarder la "console d'erreurs" | FireBug
| | Outils / Console d'erreurs | | 
|~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~| 
|<label style= "color: rgb(128, 0, 0);">Internet Explorer</label>|activer le deboggage : utils/options I le Debogger IE | 
| | dans la liste, sous "Navigation" : décocher | | 
| | ° Afficher une notification de chaque erreur de script | | 
| | ° Désactiver le débogage de Scripts (autres applications)| | 
| | ° Désactiver le débogage de Scripts (Internet Explorer) | | 
|~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~| 
|<label style ="color: rgb(128, 0, 0);">K-Meleon</label> |regarder la "console d'erreurs" | | 
| | Outils / Console d'erreurs | | 
|~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~| 
|<label style="color: rgb(128, 0, 0);">Opera</label> |regarder la "console d'erreurs" | | 
| | utils / Asole d'erreurs | | 
o~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~o~~~~~~~~~~~~~~~~o







<hr />




Cordialement            Bul         [mon Site]     [M'écrire]
<hr />


En général, c'est absurde de généraliser.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
si tu parles d'un ".js" avec
    <Script    Type="Text/JavaScript"
                    Src="fichier.js"></Script>
    aucune importance. c'est un copié/collé du contenu. rien de plus.

    tu peux essayer "tel quel" "texto"... ce que j'ai mis en exemple,
       sans rien d'autre ?    et nous dire.

<hr />                        Cordialement            Bul         [mon Site]     [M'écrire]<hr />

                                                    En général, c'est absurde de généraliser.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
bonjour,

    un ch'tit exemple
        ( uniquement avec syntaxe IE,  peu de choses à faire pour la compatibilité )


<hr size= "2" width="100%" />
test.xml




<hr size ="2" width="100%" />

<?xml version="1.0" encoding="ISO-8859-1"?>
<rep>
    <qui>
        gérard

        <nom>Menvussa</nom>
        <tel>0123456789</tel>
    </qui>
    <qui>
        gédéon

        <nom>Teuzeumani</nom>
        <tel>1234567890</tel>
    </qui>
</rep>



<hr size="2" width="100%" />
test.htm

<hr size="2" width="100%" />

<script type="text/javascript">
  var xml=new ActiveXObject("Microsoft.XMLDOM");
  xml.async=false;
  xml.load("test.xml");
  var r=xml.getElementsByTagName("rep")[0];
  for ( var q=0;q<r.getElementsByTagName("qui").length;q++ )
  { var n=r.getElementsByTagName("qui")[q];
    alert(n.getElementsByTagName("nom")[0].firstChild.data);
  }
</script>



<hr />




Cordialement                Bul             [mon Site]         [M'écrire]<hr />
En général, c'est absurde de généraliser.
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
...et pour FF :
    var xml= document.implementation.createDocument("", "", null);
c'est tout.
<hr />



Cordialement            Bul         [mon Site]     [M'écrire]<hr />
En général, c'est absurde de généraliser.
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

Euh j'ai essayé mais ça marche pas :(
Comment j'utilise var xml= document.implementation.createDocument("", "", null); ?
Messages postés
694
Date d'inscription
lundi 5 décembre 2005
Statut
Membre
Dernière intervention
8 janvier 2014
13
si ton xml est contenu dans une variable javascript, remplaces
xml.load("test.xml");
par
xml.loadXML(XMLString);

Cette solution n'est valable qu'avec ce boulet d'ie.
Pour FF

var parser=new DOMParser();
var doc=parser.parseFromString(text,"text/xml");

sinon lis ça : http://www.w3schools.com/dom/dom_parser.asp
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
le boulet ce ne serait pas toi ?
    ni IE, ni FF en tout cas, puisque ça baigne pour les 2 !


    <script type="text/javascript">
    var xml;
    if ( document.implementation.createDocument )
               xml=document.implementation.createDocument("", "", null);
    else    xml=new ActiveXObject("Microsoft.XMLDOM");
    xml.async=false;
    xml.load("test.xml");
    var r=xml.getElementsByTagName("rep")[0];
    for ( var q=0;q<r.getElementsByTagName("qui").length;q++ )
    {     var n=r.getElementsByTagName("qui")[q];
        alert(n.getElementsByTagName("nom")[0].firstChild.data);
    }
</script>








<hr />




Cordialement                Bul         [mon Site]     [M'écrire]<hr />En général, c'est absurde de généraliser.
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

Ok, mais là ça marche bien avec Firefox mais pas du tout avec IE.
J'ai testé pour mettre seulement l'initialisation de IE et ça marche pas (que ce soit IE 6 ou IE 7)
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
je ne sais pas ce que tu fais...
l'exemple baigne au moins pour IE7  et FF 2.0.0.6 ( enfin... chez moi !?! )
tu ne dois pas reprendre "tel quel".
<hr />



Cordialement                Bul         [mon Site]     [M'écrire]<hr />
En général, c'est absurde de généraliser.
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

function handleServerResponse()
{
    if ( document.implementation.createDocument ){
        xml = document.implementation.createDocument("", "", null);
    }else{
        xml = new ActiveXObject("Microsoft.XMLDOM");
    }
    xml.async=false;
    xml.load("zone.xml");
    var zones = xml.getElementsByTagName("zones")[0];
    for ( var i=0 ; i<zones.getElementsByTagName("zone").length ; i++ )
    {
        var zone = zones.getElementsByTagName("zone")[i];
        var zone_id = zone.getElementsByTagName("id")[0].firstChild.data;
        if(zone_id == 4)
        {
            var test ="";
            for ( var k=0 ; k<zone.getElementsByTagName("network").length ; ++k )
            {
                var network = zone.getElementsByTagName("network")[k];
                var network_id = network.getElementsByTagName("id")[0].firstChild.data;
                var network_name = network.getElementsByTagName("name")[0].firstChild.data;
                var network_pic = network.getElementsByTagName("picture")[0].firstChild.data;
                
                test += ("Pour la zone :" + zone_id +"-----ID:" + network_id + "----NAME:" + network_name + "----PICTURE:" + network_pic +"
");
                document.getElementById('wlogon').innerHTML = test;
            }
        
        }
    }
}

Voila ma fonction au complet qui est appellé mar un onMouseOver
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
ah... si on avait le xml ( un extrait ) ?    mais avant :
  var zone_id = zone.getElementsByTagName("id")[0].firstChild.data;
  if(zone_id == 4)
zone_id ce doit être du string. donc  if(zone_id == '4') ça irait pas mieux ?


<hr />




Cordialement Bul [mon Site] [M'écrire]<hr />En général, c'est absurde de généraliser.
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

Voila un petit exemple du XML:
<zones>
     <zone>
         1
        <name>exemple_zone</name>
        <network>
            11
            <name>exemple</name>
            exemple.gif

        </network>
    </zone>
</zones>

Donc zones est l'élément racine. unz zone a un id et un nom et elle peut contenir plusieurs network
et il y a plusieurs zone.

Au niveau de if(zone_id == '4') ça n'a pas d'importance car j'ai rajouté un paramètre à la fonction qui est cette valeur à comparé j'ai donc:
    if(zone_id == selected_zone)
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

J'ai exactement la même chose mais ça passe pas sur IE.
Une chose, j'ai mon javascript dans un fichier séparé, est ce important ?
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

J'ai mi la fonction telle quelle dans le fichier HTML et maintenant ça marche
C'est bizarre ça enfin bon ça fonctionne

Je vous remercie tous particulièrement toi bultez 
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
donc (?) un erreur dans le .js, ou de l'inclusion de ce .js, ou ... ?
je serais plus qu'ébahi que cela vienne du fait que ce soit dans un .js
<hr />                Cordialement          Bul         [mon Site]     [M'écrire]<hr />

                                            En général, c'est absurde de généraliser.
Messages postés
11
Date d'inscription
lundi 16 juillet 2007
Statut
Membre
Dernière intervention
14 février 2008

Ben pourtant je me suis contenté de couper coller la fonction du .js vers la zone javascript de ma page et BOOM ça marche sur IE
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
33
koi ki n'y avait réellement dans ce .js ?
peut-être <script> la fonction javascript....</script> ?   pourquoi pas ?
et dans ce cas, tout s'explique.
<hr />                Cordialement        Bul     [mon Site]     [M'écrire]<hr />

                                                        En général, c'est absurde de généraliser.