可以使用括号运算符 —
(
和
)
— 过滤具有特定元素名称或属性值的元素。请考虑下面的 XML 对象:
var x:XML =
<employeeList>
<employee id="347">
<lastName>Zmed</lastName>
<firstName>Sue</firstName>
<position>Data analyst</position>
</employee>
<employee id="348">
<lastName>McGee</lastName>
<firstName>Chuck</firstName>
<position>Jr. data analyst</position>
</employee>
</employeeList>
以下表达式都是有效的:
-
x.employee.(lastName == "McGee")
— 这是第二个
employee
节点。
-
x.employee.(lastName == "McGee").firstName
— 这是第二个
employee
节点的
firstName
属性。
-
x.employee.(lastName == "McGee").@id
— 这是第二个
employee
节点的
id
属性的值。
-
x.employee.(@id == 347)
— 第一个
employee
节点。
-
x.employee.(@id == 347).lastName
— 这是第一个
employee
节点的
lastName
属性。
-
x.employee.(@id > 300)
— 这是具有两个
employee
属性的 XMLList。
-
x.employee.(position.toString().search("analyst") > -1)
— 这是具有两个
position
属性的 XMLList。
如果您尝试过滤不存在的属性或元素,会引发异常。例如,以下代码的最后一行产生一个错误,因为第二个
p
元素没有
id
属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
同样,以下代码的最后一行也会产生一个错误,因为第二个
p
元素没有
b
属性:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
为避免出现这些错误,可以使用
attribute()
和
elements()
方法来识别具有匹配属性或元素的属性,如以下代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(attribute('id') == '123'));
trace(doc.p.(elements('b') == 'Bob'));
还可以使用
hasOwnProperty()
方法,如下面的代码所示:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(hasOwnProperty('@id') && @id == '123'));
trace(doc.p.(hasOwnProperty('b') && b == 'Bob'));