如何跨多个元素按属性和值进行过滤?

时间:2015-07-16 22:03:09

标签: xml actionscript-3 e4x

我试图通过检查XML节点的类型(类型是属性)来查找XML节点。我可以使用以下代码成功完成此操作:

var xml:XML = describeType(this);
var classname:String = getQualifiedClassName(mainGroup);
var xmlList:XMLList = xml.accessor.(@type==classname);
if (xmlList.length()) {
    trace("Found:" + xmlList[0]);
}

但我不知道它是否永远是一个"访问者"元件。它可能是一个变量"元素或可能是别的东西。所以我想搜索XML中具有type属性的所有元素,这些元素的值与我正在寻找的值相匹配。当我使用以下内容时,它说它无效:

// 1084: Syntax error: expecting doublecolon before semicolon.
var xmlList:XMLList = xml..(@type==classname);

获取我正在寻找的信息的正确语法是什么?

以下是一些要测试的XML:

<type name="MyApplication" base="spark.components::WindowedApplication" isDynamic="false" isFinal="false" isStatic="false">
    <accessor name="explicitMinWidth" access="readwrite" type="Number" declaredBy="mx.core::UIComponent"/>

    <accessor name="mainGroup" access="readwrite" type="components::MainGroup" declaredBy="MyApplication">

    </accessor>

    <variable name="controlBarGroup" type="spark.components::Group">

    </variable>
</type>

1 个答案:

答案 0 :(得分:1)

如何使用*这样:

var xml:XML = <type name="MyApplication" base="spark.components::WindowedApplication" isDynamic="false" isFinal="false" isStatic="false">
    <accessor name="explicitMinWidth" access="readwrite" type="Number" declaredBy="mx.core::UIComponent" />
    <accessor name="mainGroup" access="readwrite" type="components::MainGroup" declaredBy="MyApplication" />
    <variable name="controlBarGroup" type="spark.components::Group" />
    <variable name="explicitMinWidth" access="readwrite" type="Number" declaredBy="mx.core::UIComponent" />
</type>;

var xml_list:XMLList = xml.*.(@type == 'Number');
trace(xml_list.length());   // gives : 2

编辑:

要避免错误Error #1065: Variable type is not defined并删除不包含type attribut的行,您可以使用:

var xml_list:XMLList = xml.*.(attribute('type') == 'Number');
trace(xml_list.length());   // gives : 2

希望可以提供帮助。