Как я могу обнаружить дочерний элемент переменной parent в E4X (в частности, Flex 3)? - PullRequest
0 голосов
/ 20 июля 2009

У меня есть 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. Очевидно, я что-то упускаю, но что это?

Ответы [ 5 ]

2 голосов
/ 21 июля 2009

Попробуйте это

xml..opt_out_flag

Будет искать все вхождения

1 голос
/ 20 июля 2009

Полагаю, вы хотите использовать xml.*.hasOwnProperty('opt_out_flag') вместо того, что используете в данный момент.

0 голосов
/ 13 августа 2009

Вы можете использовать

var optOut:Boolean = xml..opt_out_flag != undefined

Вы можете пропустить! = Неопределенную часть, но я бы оставил ее там для удобства чтения.

0 голосов
/ 21 июля 2009

вы можете использовать метод потомков (который рекурсивно спускается по дереву), чтобы найти тег?

var optOutNodes:XMLList = xml.descendants("opt_out_flag");

if(optOutNodes.length())
{
   //do code here
}

Надеюсь, это то, что вы ищете.

0 голосов
/ 20 июля 2009

Можете ли вы гарантировать, что <opt_out_flag/> всегда будет первым дочерним элементом элемента <question>? Если это так, должно работать что-то вроде следующего:

(отказ от ответственности: я знаю, что это работает с атрибутами, но я не знаю, будет ли это работать с дочерними элементами)

if( "opt_out_flag" in xml.children()[0] ) {
    doSomething();
}
...