괄호 연산자인
(
및
)
를 사용하면 특정 요소 이름 또는 특성 값으로 요소를 필터링할 수 있습니다. 다음과 같은 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'));