Se pueden utilizar los operadores de paréntesis,
(
y
)
, para filtrar elementos con un nombre de elemento o un valor de atributo específicos. Considere el siguiente objeto 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>
Las siguientes expresiones son todas válidas:
-
x.employee.(lastName == "McGee")
; es el segundo nodo
employee
.
-
x.employee.(lastName == "McGee").firstName
; es la propiedad
firstName
del segundo nodo
employee
.
-
x.employee.(lastName == "McGee").@id
; es el valor del atributo
id
del segundo nodo
employee
.
-
x.employee.(@id == 347)
; es el primer nodo
employee
.
-
x.employee.(@id== 347).lastName
; es la propiedad
lastName
del primer nodo
employee
.
-
x.employee.(@id > 300)
; es un objeto XMLList con ambas propiedades
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
; es un objeto XMLList con ambas propiedades
position
.
Si se intentan filtrar atributos o elementos que no existen, se emitirá una excepción. Por ejemplo, la línea final del código siguiente genera un error porque no hay ningún atributo
id
en el segundo elemento
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
De manera similar, la línea final del código siguiente genera un error porque no hay ningún atributo
b
en el segundo elemento
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Para evitar estos errores, se pueden identificar las propiedades que tienen los atributos o elementos coincidentes mediante los métodos
attribute()
y
elements()
, como se muestra en el código siguiente:
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'));
También se puede utilizar el método
hasOwnProperty()
, como se muestra en el código siguiente:
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'));