如何判断E4X表达式是否匹配?

时间:2009-04-15 15:16:20

标签: flex actionscript-3 e4x

我正在尝试访问XMLList项并将其转换为XML对象。

我正在使用这个表达式:

masonicXML.item.(@style_number == styleNum)

例如,如果有匹配,一切正常,但如果没有匹配,那么当我尝试将其转换为XML时,我会得到一个错误,说它必须形成良好。因此,在将其转换为XML之前,我需要确保表达式匹配。我尝试将其设置为XMLList变量并检查它是否为text()属性,如下所示:

var defaultItem:XMLList = DataModel.instance.masonicXML.item.(@style_number == styleNum);
                    if(defaultItem.text())
                    {
                        DataModel.instance.selectedItem = XML(defaultItem);
                    }

但如果没有匹配,它仍会给我一个错误。如果匹配,它可以正常工作。

谢谢!

3 个答案:

答案 0 :(得分:1)

根据我的经验,检查结果的最简单方法是获取列表的第0个元素,看看它是null

以下是您的代码示例,并进行了一些调整。请注意,我已将defaultItem的类型从XMLList更改为XML,我将其分配给列表的第0个元素。

var defaultItem:XML = 
    DataModel.instance.masonicXML.item.(@style_number == styleNum)[0];
if( defaultItem != null ) 
{
    DataModel.instance.selectedItem = defaultItem;
}

答案 1 :(得分:0)

好的,我可以用它来解决这个问题:

if(String(defaultItem.@style_number).length)

答案 2 :(得分:0)

马特的空检查是一个很好的解决方案。 (除非有可能在XMLList中有空项目..可能没有,但我没有验证这一点。)

您还可以检查XMLList的长度,而不将其强制转换为String:

if (defaultItem.@style_number.length() > 0)

与String和Array的区别在于,对于XMLList,length()是一种方法而不是属性。