如何跨多个元素按属性和值进行过滤?
How do I filter by attribute and value across multiple elements?
我试图通过检查它的类型(类型是一个属性)来找到一个 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]);
}
但我不知道它是否永远是一个 "accessor" 元素。它可以是 "variable" 元素或其他元素。因此,我想搜索 XML 中具有类型属性且其值与我要查找的值相匹配的所有元素。当我使用以下内容时,它说它无效:
// 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>
像这样使用 *
怎么样:
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
属性的行,您可以使用 :
var xml_list:XMLList = xml.*.(attribute('type') == 'Number');
trace(xml_list.length()); // gives : 2
希望能帮到你。
我试图通过检查它的类型(类型是一个属性)来找到一个 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]);
}
但我不知道它是否永远是一个 "accessor" 元素。它可以是 "variable" 元素或其他元素。因此,我想搜索 XML 中具有类型属性且其值与我要查找的值相匹配的所有元素。当我使用以下内容时,它说它无效:
// 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>
像这样使用 *
怎么样:
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
属性的行,您可以使用 :
var xml_list:XMLList = xml.*.(attribute('type') == 'Number');
trace(xml_list.length()); // gives : 2
希望能帮到你。