Du kan använda parentesoperatorer –
(
och
)
– för att filtrera element med hjälp av ett specifikt elementnamn eller attributvärde. Se följande XML-objekt:
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>
Följande uttryck är alla giltiga:
-
x.employee.(lastName == "McGee")
– Detta är den andra
employee
-noden.
-
x.employee.(lastName == "McGee").firstName
– Detta är egenskapen
firstName
för den andra
employee
-noden.
-
x.employee.(lastName == "McGee").@id
– Detta är värdet på attributet
id
för den andra
employee
-noden.
-
x.employee.(@id == 347)
– Den första
employee
-noden.
-
x.employee.(@id == 347).lastName
– Detta är egenskapen
lastName
för den första
employee
-noden.
-
x.employee.(@id > 300)
– Detta är en XMLList med båda
employee
-egenskaperna.
-
x.employee.(position.toString().search("analyst") > -1)
– Detta är en XMLList med båda
position
-egenskaperna.
Om du försöker filtrera attribut eller element som inte finns inträffar ett undantag. På den sista raden i exemplet nedan genererar följande kod ett fel eftersom det inte finns något
id
-attribut i det andra
p
-elementet:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Detsamma gäller för den sista raden i exemplet nedan där följande kod leder till ett fel eftersom det inte finns någon
b
-egenskap i det andra
p
-elementet.
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Du kan undvika dessa fel genom att använda metoderna
attribute()
och
elements()
för att identifiera matchande egenskaper, enligt följande exempel:
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'));
Du kan också använda metoden
hasOwnProperty()
som i följande exempel:
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'));