Comment puis-je détecter l'élément enfant d'un parent variable E4X (Flex 3, en particulier)?
-
18-09-2019 - |
Question
Je XML qui ressemble à ceci:
<question>
<type_elt>
<opt_out_flag />
</type_elt>
</question>
type_elt
est pas un nom d'élément; il pourrait être <single>
, <multiple>
ou autre chose, déterminé lors de l'exécution. Comment, compte tenu de cela, je peux détecter la présence de l'élément opt_out_flag
?
J'ai essayé (où xml
fait référence à l'élément question
):
if (xml.*.opt_out_flag) {
do_something();
}
mais même dans les cas sans opt_out_flag
l'expression ci-dessus retourne true
. Il est évident que je manque quelque chose, mais qu'est-ce?
La solution
Je crois que vous voulez utiliser xml.*.hasOwnProperty('opt_out_flag')
plutôt que ce que vous utilisez actuellement.
Autres conseils
Essayer cette
xml..opt_out_flag
Il recherchera tout événement
Pouvez-vous être assuré que <opt_out_flag/>
sera toujours le premier enfant de l'élément de <question>
? Si oui, quelque chose comme ce qui suit devrait fonctionner:
(disclaimer: Je sais que cela fonctionne avec des attributs, mais je ne sais pas si cela va fonctionner avec des éléments de l'enfant)
if( "opt_out_flag" in xml.children()[0] ) {
doSomething();
}
pouvez-vous utiliser la méthode descendants (récursif dans l'arbre) pour trouver le tag?
var optOutNodes:XMLList = xml.descendants("opt_out_flag");
if(optOutNodes.length())
{
//do code here
}
L'espoir est ce que vous recherchez.
Vous pouvez utiliser
var optOut:Boolean = xml..opt_out_flag != undefined
vous pouvez omettre le! = Partie non définie, mais je voudrais le laisser là pour faciliter la lecture.