Operatory nawiasów —
(
oraz
)
— umożliwiają filtrowanie elementów na podstawie nazwy lub wartości atrybutu: Rozważmy następujący obiekt 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>
Wszystkie poniższe wyrażenia są poprawne:
-
x.employee.(lastName == "McGee")
— to jest drugi węzeł
employee
.
-
x.employee.(lastName == "McGee").firstName
— to jest właściwość
firstName
drugiego węzła
employee
.
-
x.employee.(lastName == "McGee").@id
— to jest wartość atrybutu
id
drugiego węzła
employee
.
-
x.employee.(@id == 347)
— pierwszy węzeł
employee
.
-
x.employee.(@id == 347).lastName
— to jest właściwość
lastName
pierwszego węzła
employee
.
-
x.employee.(@id > 300)
— to jest obiekt XMLList z obiema właściwościami
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
— to jest obiekt XMLList z obiema właściwościami
position
.
Próba filtrowania na podstawie nieistniejących atrybutów lub elementów spowoduje wygenerowanie wyjątku. Na przykład ostatni wiersz poniższego kodu wywoła błąd, ponieważ nie istnieje atrybut
id
w drugim elemencie
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Podobnie ostatni wiersz poniższego kodu wywoła błąd, ponieważ nie istnieje właściwość
b
drugiego elementu
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Aby uniknąć tych błędów, można zidentyfikować właściwości ze zgodnymi atrybutami elementami, korzystając z metod
attribute()
i
elements()
, tak jak w poniższym kodzie:
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'));
Możliwe jest także użycie metody
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'));