括弧演算子の
(
および
)
を使用すると、エレメント名または属性値を指定してエレメントをフィルター処理できます。例えば、次のような 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>
この場合、次の式はいずれも有効なコードです。
-
x.employee.(lastName == "McGee")
:2 番目の
employee
ノード
-
x.employee.(lastName == "McGee").firstName
:2 番目の
employee
ノードが持つ
firstName
プロパティ
-
x.employee.(lastName == "McGee").@id
:2 番目の
employee
ノードが持つ
id
属性の値
-
x.employee.(@id == 347)
:最初の
employee
ノード
-
x.employee.(@id == 347).lastName
:最初の
employee
ノードが持つ
lastName
プロパティ
-
x.employee.(@id > 300)
:両方の
employee
プロパティを含んだ XMLList
-
x.employee.(position.toString().search("analyst") > -1)
:両方の
position
プロパティを含んだ XMLList
存在しない属性またはエレメントを指定してフィルター処理を実行しようとすると、例外がスローされます。例えば、次のコード例では最後の行を実行しようとした時点でエラーが発生します。これは、2 番目の
p
エレメントに
id
属性がないためです。
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
同じように、次のコード例では最後の行を実行しようとした時点でエラーが発生します。これは、2 番目の
p
エレメントに
b
プロパティがないためです。
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(b == 'Bob'));
これらのエラーを避けるには、次のコードのように、
attribute()
メソッドおよび
elements()
メソッドを使用して、一致する属性またはエレメントを持つプロパティを識別します。
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'));
また、次のコードのように
hasOwnProperty()
メソッドを使用するともできます。
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'));