Можно использовать операторы круглых скобок —
(
и
)
— для фильтрации элементов по определенному имени элемента или значению атрибута. Рассмотрим следующий объект 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
— это свойство
firstName
второго узла
employee
.
-
x.employee.(lastName == "McGee").@id
— это значение атрибута
id
второго узла
employee
.
-
x.employee.(@id == 347)
— это первый узел
employee
.
-
x.employee.(@id == 347).lastName
— это свойство
lastName
первого узла
employee
.
-
x.employee.(@id > 300)
— это объект XMLList с обоими свойствами
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
— это объект XMLList с обоими свойствами
position
.
Если предпринимается попытка фильтрации несуществующих атрибутов или элементов, создается исключение. Например, последняя строка следующего кода генерирует ошибку, поскольку во втором элементе
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'));