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

NodeJS Discussion :

Fonction récursive de recherche XML supprime la dernière valeur


Sujet :

NodeJS

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2011
    Messages
    412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2011
    Messages : 412
    Par défaut Fonction récursive de recherche XML supprime la dernière valeur
    Bonjour,
    je voudrais rechercher récursivement des liens entre mes items. Ces liens sont définis par la balise <issuekey>. Mon algorithme fonctionne mais supprimer la dernière valeur si elle n'a pas de lien. Je cherche le problème depuis plus de 5 heures mais je ne trouve pas...
    Voici mon XML :
    Code xml : 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
    <rss>
        <channel>
            <item>
                <key id="0">Name1</key>
                <issuelinks>
                    <issuelinktype id="0">
                        <name>Bundle</name>
                        <outwardlinks description="descr">
                            <issuelink>
                                <issuekey id="0">Name2</issuekey>
                            </issuelink>
                        </outwardlinks>
                    </issuelinktype>
                </issuelinks>
            </item>
     
     
            <item>
                <key id="0">Name2</key>
                <issuelinks>
                    <issuelinktype id="0">
                        <name>Bundle</name>
                        <outwardlinks description="descr">
                            <issuelink>
                                <issuekey id="0">Name3</issuekey>
                            </issuelink>
                        </outwardlinks>
                    </issuelinktype>
                </issuelinks>
            </item>
     
            <item>
                <key id="0">Name3</key>
                <issuelinks>
                    <issuelinktype id="0">
                        <name>Bundle</name>
                        <outwardlinks description="descr">
                            <issuelink>
                                <issuekey id="0">Name4</issuekey>
                            </issuelink>
                        </outwardlinks>
                    </issuelinktype>
                </issuelinks>
            </item>
        </channel>
    </rss>


    Pour cet example, les liens entre les items donne cela :
    Name1 -> Name2 -> Name3 -> Name4
    Name2 -> Name3 -> Name4
    Name3 -> Name4
    Mon programme me renvoit ça :
    Name1 has a link with : Name2
    Name2 has a link with : Name3
    Name3 has a link with :
    Name2 has a link with :Name3
    Name3 has a link with :
    Name3 has a link with :
    Le problème c'est que Name4 n'apparait pas car il n'a pas d'issuekey.
    Voici mon code :

    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
    function getDependance(tabItem,item) {
                if (hasIssueLink(item)) { 
        // If item has an issuelink(an attribute essantial)
                    var issueKeys = item.issuelinks.issuelinktype.outwardlinks.issuelink; 
        // IssueKeys list of the item passed in parameters
                    for(var issueKeyId in issueKeys) {
        // For each issueKey, in the list of issueKeys
                        var issueKey = issueKeys[issueKeyId];
         // issueKey of the current item
                        var itemName = getIssueKeyContent(issueKey); 
        // Name of the linked item found
                        console.log(getKeyContent(item) + " has a link with : " );
                        getDependance(tabItem,searchItemByName(tabItem,itemName));
                    }
                }
            }
            function searchItemByName(tabItem, name){
                for (var item in tabItem){
                    if (getKeyContent(tabItem[item]) == name){
                        console.log(getKeyContent(tabItem[item]));
                        return tabItem[item];
                    }
                }
            }
     
    function hasIssueLink(item){
        if (item && item.issuelinks && item.issuelinks.issuelinktype && item.issuelinks.issuelinktype.outwardlinks && item.issuelinks.issuelinktype.outwardlinks.issuelink) {
            return true;
        } else {
            return false;
        }
    }
    J'espère que vous pourrez m'aider !

  2. #2
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    De par la logique des choses, car je n'ai pas essayé à regarder les détails de toutes les fonctions, je dirais que le plus simple semble de modifier ces deux lignes #12 et #13 comme ça.
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    /*
    console.log(getKeyContent(item) + " has a link with : " );
    getDependance(tabItem,searchItemByName(tabItem,itemName));
    */
    var itemFound=searchItemByName(tabItem, itemName);
    if (!itemFound) {
        console.log(getKeyContent(item) + " has a link with : " + itemName);
    } else {
        console.log(getKeyContent(item) + " has a link with : ");
        getDependance(tabItem,itemFound);
    }

Discussions similaires

  1. Recherche à l'aide d'une fonction récursive
    Par Phoenix89 dans le forum Shell et commandes GNU
    Réponses: 32
    Dernier message: 24/04/2014, 10h58
  2. [Free Pascal] Fonction récursive de recherche dichotomique
    Par fleurose dans le forum Free Pascal
    Réponses: 4
    Dernier message: 13/04/2011, 19h55
  3. Afficher du XML dans une table HTML avec fonction récursive (ou pas)
    Par iviewclear dans le forum Général JavaScript
    Réponses: 14
    Dernier message: 19/04/2010, 17h04
  4. Réponses: 2
    Dernier message: 17/06/2008, 12h08
  5. [VB6] XML, fonction récursive de recherche
    Par kboo dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 24/04/2006, 21h27

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