Comment Parcourir Correctement les Objets Résultat dans Flex
Lorsqu’ils travaillent avec Apache Flex, les développeurs rencontrent souvent la nécessité de parcourir des données récupérées d’un service web. Un scénario courant consiste à gérer des données XML retournées via un appel HTTPService
. Cependant, beaucoup rencontrent des problèmes, surtout lorsque la réponse comprend un nombre variable de lignes. Dans cet article de blog, nous allons explorer comment parcourir correctement ces objets résultat XML sans rencontrer d’erreurs.
Le Problème : Parcourir des Données XML
Dans une situation typique, vous pourriez faire un appel HTTPService
et recevoir des données XML structurées comme ceci :
<DataTable>
<Row>
<text>foo</text>
</Row>
<Row>
<text>bar</text>
</Row>
</DataTable>
Lors du traitement de ces données, de nombreux développeurs utilisent une boucle for pour itérer à travers les nœuds “Row” avec le code suivant :
for (var i:int = 0; i < event.result.DataTable.Row.length; i++) {
if (event.result.DataTable.Row[i].text == "foo")
mx.controls.Alert.show('foo trouvé !');
}
Bien que ce code fonctionne correctement lorsqu’il y a plusieurs nœuds “Row” présents, il échoue lorsqu’il n’y a qu’un seul nœud “Row” car length
n’est pas une propriété de l’objet XMLList
retourné. Dans de tels cas, cela peut entraîner des erreurs inattendues.
La Solution : Utiliser la Boucle for each
Comprendre la Longueur de XMLList
La clé pour résoudre le problème est de reconnaître que length
est une méthode de XMLList
, et non une propriété. Par conséquent, la bonne manière d’obtenir le nombre de lignes devrait être :
event.result.DataTable.Row.length();
Cependant, interroger la longueur directement peut encore prêter à confusion, surtout pour les développeurs qui pourraient ne pas y prêter attention ou avoir des réponses XML incohérentes.
Meilleure Pratique : Utiliser la Boucle for each
Pour améliorer la clarté du code et éviter des erreurs potentielles, il est préférable d’utiliser une boucle for each
lorsque vous travaillez avec XMLList
. Cette méthode est plus sûre et plus idiomatique pour parcourir les nœuds XML :
for each (var node:XML in event.result.DataTable.Row) {
if (node.text == "foo") {
mx.controls.Alert.show('foo trouvé !');
}
}
Avantages de la Boucle for each
:
- Lisibilité : Le code est plus simple et plus facile à lire.
- Robustesse : Elle contourne les problèmes liés à l’accès aux longueurs, ce qui la rend moins sujette aux erreurs.
- Flexibilité : Elle fonctionne sans problème avec des nombres variables de nœuds enfants.
Conclusion
Gérer des données XML dans Flash et Apache Flex peut être délicat si ce n’est pas fait correctement. En utilisant une boucle for each
pour parcourir les résultats XMLList
des appels HTTPService
, vous évitez non seulement les erreurs associées à des nœuds enfants uniques, mais vous créez également un code plus propre et plus maintenable.
La mise en œuvre de cette pratique améliorera la qualité de votre code et réduira la probabilité de problèmes d’exécution lors de la manipulation de données XML dans vos applications Flex.