Vous pouvez utiliser les opérateurs parenthèses—
(
et
)
—pour filtrer des éléments avec un nom d’élément spécifique ou une valeur d’attribut. Considérez l’objet XML suivant :
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>
Les expressions suivantes sont toutes valides :
-
x.employee.(lastName == "McGee")
—Il s’agit du deuxième nœud
employee
.
-
x.employee.(lastName == "McGee").firstName
—Il s’agit de la propriété
firstName
du deuxième nœud
employee
.
-
x.employee.(lastName == "McGee").@id
—Il s’agit de la valeur de l’attribut
id
du deuxième nœud
employee
.
-
x.employee.(@id == 347)
—Le premier nœud
employee
.
-
x.employee.(@id == 347).lastName
—Il s’agit de la propriété
lastName
du premier nœud
employee
.
-
x.employee.(@id > 300)
—Il s’agit d’un XMLList avec deux propriétés
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
—Il s’agit d’un XMLList avec deux propriétés
position
.
Si vous tentez d’appliquer un filtre à des attributs ou des éléments qui n’existent pas, une exception est renvoyée. Par exemple, la dernière ligne du code suivant génère une erreur car il n’existe aucun attribut
id
dans le deuxième élément
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
De même, la dernière ligne du code suivant génère une erreur car il n’existe aucune propriété
b
du deuxième élément
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Pour éviter ces erreurs, vous pouvez identifier les propriétés ayant les éléments ou les attributs correspondants, à l’aide des méthodes
attribute()
et
elements()
, comme dans le code suivant :
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'));
Vous pouvez également utiliser la méthode
hasOwnProperty()
, comme dans le code suivant :
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'));