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 :

recherche dans fichier xml


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut recherche dans fichier xml
    Bonjour,
    j'ai mis en place un systeme de recherche dynamique (affichage des mots aux furs et à mesures que l'on tape les lettre). J'utilise pour cela un fichier xml dans lequel je recherche les balises <mot>:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var noeud = xmldoc.getElementsByTagName('mot')
    jusque là ca marche bien, mais j'aimerais pouvoir récupérer uniquement les balises <mot> qui ont pour valeur d'attributs velo (<mot nom="velo">).
    j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var noeud = xmldoc.getElementsByTagName('mot')[@mot="velo"];
    et forcement ca ne marche pas!
    Pour le moment j'ai une fonction qui marche avec en fait un parcours de tous les noeud renvoyer par le premier code, et je teste la valeur de cette attribut, mais je pense que ca pourrait être plus rapide (et plus facile ) pour des recherches un peu plus compliqué.
    Donc si quelqu'un pouvait m'aider, je n'ai pour le moment rien trouvé...

  2. #2
    Membre confirmé

    Inscrit en
    Mars 2003
    Messages
    241
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 241
    Par défaut
    J'ai deux petites fonctions :
    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
    function findNodeByAttributeValue(tag, attribute, attributeValue)
    {
      try {
        var node = this.xmlDoc.getElementsByTagName(tag);
        for (var i = 0; i < node.length; i++)
        {
          if (node[i].nodeType == node[i].ELEMENT_NODE)
          {
            var value = getAttributeValue(node[i], attribute);
            if (value.toLowerCase().indexOf(attributeValue.toLowerCase()) >= 0)
              return (node[i]);
        }
      } catch (e) {
        return e;
      }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    function getAttributeValue(node, attribute)
    {
      try {
        var value;
        if (node.getAttribute(attribute)) value = node.getAttribute(attribute);
        if (node.attributes[attribute]) value = node.attributes[attribute].value;
     
        return value;
      } catch (e) {
        return e;
      }
    }
    En esperant que ça puisse t'aider...

    PS: la fonction findNodeByAttributeValue retourne un objet XML donc pour obtenir le nom du noeud :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (node.nodeName) name = node.nodeName;
    if (node.name) name = node.name;

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    130
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mars 2005
    Messages : 130
    Par défaut
    Je te remercie, mais apparement tu fais aussi une boucle pour tester les attriubuts, moi je souhaitais une fonction qui permettent de le récupérer directement, je sais que ca se fait via XPAth, je l'ai déjà fait (mais je me souviens pas de la syntaxe exacte), ce que je cherchais c'était une fonction qui y ressemble.
    En tout cas si ca en interesse certain, où qu'ils veulent me donner leur avis, voici le code que j'utilise
    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
     
    function definition() {
     
            if (http_request.readyState == 4) {
                if (http_request.status == 200) {
                    var select=document.test.elements['liste'].options[document.test.elements['liste'].selectedIndex].text;
                    var xmldoc = http_request.responseXML;
                    var noeud = xmldoc.getElementsByTagName('mot');
                    document.test.resultat.value=select+" : ";
                    var debut=true;
                    //alert(noeud.length);
                    for(var i=0;i<noeud.length;i++){
                    	var valeur=noeud[i].getAttribute("nom");
                    	if(valeur==select){
                    		valeur=noeud[i].firstChild.data;
    						document.test.resultat.value=document.test.resultat.value+'\n'+valeur;
    					}
                    }
     
                } else {
                    alert('Un problème est survenu avec la requête.');
                }
            }
     
        }
    Comme je le disais plus haut, cette fonction marche, je cherche juste à l'optimiser...

Discussions similaires

  1. recherche dans fichier xml
    Par hichamland dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2009, 15h58
  2. Recherche dans fichier xml
    Par sandytarit dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 19/03/2007, 10h28
  3. Réponses: 4
    Dernier message: 28/10/2005, 09h59
  4. Pb de balises dans fichier XML
    Par allstar dans le forum XMLRAD
    Réponses: 2
    Dernier message: 10/06/2005, 13h59
  5. Réponses: 14
    Dernier message: 25/10/2004, 21h33

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