Você pode usar os operadores de parênteses –
(
e
)
– para filtrar elementos com um nome de elemento ou valor de atributo específico. Considere o objeto XML a seguir:
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>
As seguintes expressões são válidas:
-
x.employee.(lastName == "McGee")
– É o segundo nó
employee
.
-
x.employee.(lastName == "McGee").firstName
– É a propriedade
firstName
do segundo nó
employee
.
-
x.employee.(lastName == "McGee").@id
– É o valor do atributo
id
do segundo nó
employee
.
-
x.employee.(@id == 347)
– O primeiro nó
employee
.
-
x.employee.(@id == 347).lastName
– É a propriedade
lastName
do primeiro nó
employee
.
-
x.employee.(@id > 300)
– É um XMLList com as duas propriedades
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
– É um objeto XMLList com as duas propriedades
position
.
Se você tentar filtrar os atributos ou elementos que não existem, é lançada uma exceção. Por exemplo, a linha final do código a seguir gera um erro, porque não existe nenhum atributo
id
no segundo elemento
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Do mesmo modo, a linha final do código a seguir gera um erro, porque não existe nenhuma propriedade
b
do 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 esses erros, você pode identificar as propriedades que têm atributos ou elementos correspondentes usando os métodos
attribute()
e
elements()
, como no código a seguir:
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'));
Também é possível usar o método
hasOwnProperty()
, como no seguinte código:
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'));