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:
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 :
Citation:
Name1 -> Name2 -> Name3 -> Name4
Name2 -> Name3 -> Name4
Name3 -> Name4
Mon programme me renvoit ça :
Citation:
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:
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 !