您可以使用括號運算子
(
和
)
,篩選具有特定名稱或特質值的元素,以下列 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")
— 這是第二個
employee
節點。
-
x.employee.(lastName == "McGee").firstName
— 這是第二個
employee
節點的
firstName
屬性。
-
x.employee.(lastName == "McGee").@id
— 這是第二個
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。
如果您嘗試篩選不存在的特質或元素,就會擲出例外。例如,下列程式碼的最後一行會產生錯誤,因為第二個
p
元素中並沒有
id
特質:
var doc:XML =
<body>
<p id='123'>Hello, <b>Bob</b>.</p>
<p>Hello.</p>
</body>;
trace(doc.p.(@id == '123'));
同樣地,下列程式碼的最後一行也會產生錯誤,因為第二個
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'));