Как я могу обнаружить дочерний элемент родительской переменной в E4X (в частности, Flex 3)?
-
18-09-2019 - |
Вопрос
У меня есть XML, который выглядит так:
<question>
<type_elt>
<opt_out_flag />
</type_elt>
</question>
type_elt
не является именем элемента;может быть <single>
, <multiple>
или что-то еще, определяемое во время выполнения.Как, учитывая это, я могу обнаружить присутствие opt_out_flag
элемент?
Я попробовал это (где xml
относится к question
элемент):
if (xml.*.opt_out_flag) {
do_something();
}
но даже в случаях без opt_out_flag
приведенное выше выражение возвращает true
.Очевидно, я что-то упускаю, но что именно?
Решение
Я верю, что ты хочешь использовать xml.*.hasOwnProperty('opt_out_flag')
а не то, что вы сейчас используете.
Другие советы
Попробуй это
xml..opt_out_flag
Он будет искать все вхождения
Можете ли вы быть уверены, что <opt_out_flag/>
всегда будет в первом дочернем элементе <question>
элемент?Если да, то должно работать что-то вроде следующего:
(отказ от ответственности:Я знаю, что это работает с атрибутами, но не знаю, будет ли это работать с дочерними элементами)
if( "opt_out_flag" in xml.children()[0] ) {
doSomething();
}
Можете ли вы использовать метод потомков (который рекурсивно спускается по дереву), чтобы найти тег?
var optOutNodes:XMLList = xml.descendants("opt_out_flag");
if(optOutNodes.length())
{
//do code here
}
Надеюсь, это то, что вы ищете.
Вы можете использовать
var optOut:Boolean = xml..opt_out_flag != undefined
вы можете опустить неопределенную часть !=, но я бы оставил ее там для удобства чтения.