如何在E4X(特别是Flex 3)中检测变量父元素的子元素?

时间:2009-07-20 17:47:23

标签: flex actionscript-3 e4x

我的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 个答案:

答案 0 :(得分:2)

试试这个

xml..opt_out_flag

它将搜索所有事件

答案 1 :(得分:1)

我相信你想使用xml.*.hasOwnProperty('opt_out_flag')而不是你目前使用的那些。

答案 2 :(得分:0)

可以保证<opt_out_flag/>始终位于<question>元素的第一个孩子中吗?如果是这样,以下内容应该有效:

(免责声明:我知道这适用于属性,但我不知道它是否适用于子元素)

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

答案 3 :(得分:0)

你可以使用后代方法(递归树)来找到标签吗?

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

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

希望这就是你要找的东西。

答案 4 :(得分:0)

您可以使用

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

你可以省略!=未定义的部分,但为了便于阅读,我会留在那里。