Per filtrare gli elementi con un nome o valore di attributo specifico potete usare gli operatori parentesi:
(
e
)
. Osservate l'oggetto XML seguente:
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>
Tutte le espressioni seguenti sono valide:
-
x.employee.(lastName == "McGee")
- Questo è il secondo nodo
employee
.
-
x.employee.(lastName == "McGee").firstName
- Questa è la proprietà
firstName
del secondo nodo
employee
.
-
x.employee.(lastName == "McGee").@id
- Questo è il valore dell'attributo
id
del secondo nodo
employee
.
-
x.employee.(@id == 347)
- Il primo nodo
employee
.
-
x.employee.(@id == 347).lastName
- Questa è la proprietà
lastName
del primo nodo
employee
.
-
x.employee.(@id > 300)
: questo è un oggetto XMLList con entrambe le proprietà
employee
.
-
x.employee.(position.toString().search("analyst") > -1)
: questo è un oggetto XMLList con entrambe le proprietà
position
.
Se tentate di applicare un filtro utilizzando attributi o elementi inesistenti, viene generata un'eccezione. Ad esempio, l'ultima riga del codice seguente genera un errore perché non esiste un attributo
id
nel secondo elemento
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Analogamente, l'ultima riga del codice seguente genera un errore perché non esiste una proprietà
b
del secondo elemento
p
:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Per evitare questo tipo di errori, potete identificare le proprietà per cui esistono attributi o elementi corrispondenti usando i metodi
attribute()
e
elements()
, come nel codice seguente:
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'));
Inoltre, potete utilizzare anche il metodo
hasOwnProperty()
, come nel codice seguente:
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'));