U kunt de ronde-haakjeoperatoren,
(
en
)
) gebruiken om elementen met een specifieke elementnaam of kenmerkwaarde te filteren. Bekijk het volgende XML-object:
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>
De volgende expressies zijn allemaal geldig:
-
x.employee.(lastName == "McGee")
: dit is het tweede knooppunt
employee
.
-
x.employee.(lastName == "McGee").firstName
: dit is de eigenschap
firstName
van het tweede knooppunt
employee
.
-
x.employee.(lastName == "McGee").@id
: dit is de waarde van het kenmerk
id
van het tweede knooppunt
employee
.
-
x.employee.(@id == 347)
: het eerste knooppunt
employee
.
-
x.employee.(@id == 347).lastName
: dit is de eigenschap
lastName
van het eerste knooppunt
employee
.
-
x.employee.(@id > 300)
: dit is een XMLList met beide eigenschappen
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
: dit is een XMLList met beide eigenschappen
position
.
Als u probeert te filteren op kenmerken of elementen die niet bestaan, treedt een uitzondering op. De laatste regel van de volgende code genereert bijvoorbeeld een fout omdat er geen kenmerk
id
bestaat in het tweede element
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Op dezelfde manier genereert de laatste regel van de volgende code een fout omdat er geen eigenschap
b
bestaat van het tweede element
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
U kunt deze fouten vermijden door de eigenschappen die overeenkomende kenmerken of elementen hebben, te identificeren met de methoden
attribute()
en
elements()
, zoals in de volgende code:
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'));
U kunt ook de methode
hasOwnProperty()
gebruiken, zoals in de volgende code:
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'));