Sie können die Klammernoperatoren
(
und
)
verwenden, um Elemente mit einem bestimmten Elementnamen oder Attributwert zu filtern. Gegeben ist das folgende 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>
Die folgenden Ausdrücke sind alle gültig:
-
x.employee.(lastName == "McGee")
– Dies ist der zweite
employee
-Knoten.
-
x.employee.(lastName == "McGee").firstName
– Dies ist die
firstName
-Eigenschaft des zweiten
employee
-Knotens.
-
x.employee.(lastName == "McGee").@id
– Dies ist der Wert des
id
-Attributs des zweiten
employee
-Knotens.
-
x.employee.(@id == 347)
– Der erste
employee
-Knoten.
-
x.employee.(@id == 347).lastName
– Dies ist die
lastName
-Eigenschaft des ersten
employee
-Knotens.
-
x.employee.(@id > 300)
– Dies ist ein XMLList-Objekt mit beiden
employee
-Eigenschaften.
-
x.employee.(position.toString().search("analyst") > -1)
– Dies ist ein XMLList-Objekt mit beiden
position
-Eigenschaften.
Wenn Sie versuchen, anhand von Attributen oder Elementen zu filtern, die nicht vorhanden sind, wird eine Ausnahme ausgegeben. Die letzte Zeile des folgenden Codes erzeugt beispielsweise einen Fehler, da im zweiten
p
-Element kein
id
-Attribut vorhanden ist:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
Analog erzeugt die letzte Zeile des folgenden Codes einen Fehler, da keine
b
-Eigenschaft des zweiten
p
-Elements vorhanden ist:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
Um solche Fehler zu vermeiden, können Sie Eigenschaften mit übereinstimmenden Attributen und Elementen angeben, indem Sie wie im folgenden Code die Methoden
attribute()
und
elements()
verwenden:
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'));
Sie können auch wie im folgenden Code die
hasOwnProperty()
-Methode verwenden:
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'));