XML에는 원소, 즉 노드 말고도 노드에 포함된 속성(특성)이 있다. 이 값을 읽어 오기 위해서는 AS3에서 제공하는 attributes()를 사용하여 값을 읽어오거나 E4X문법을 사용하여 읽어 올 수 있다.
또한 AS3에서 name()를 사용하여 속성의 이름을 알 수 도있다.
var books:XML = <books>
<item price="12000" author="이외수" publisher="일지문화">삶의 길</item>
<item price="28000" author="정윤수" publisher="제우미디어">플래시 (모션+액션)</item>
<opinion>
<item price="26000" author="이문열" publisher="샘터">그의 아버지</item>
<item price="28000" author="전미연" publisher="밝은세상">사랑하기 때문에</item>
<poem>
<item price="6500" author="정윤수" publisher="21세기 북스">시간</item>
</poem>
</opinion>
</books>;
[ AS3.0의 메서드 활용 ]
1. attributes() 메서드는 속성이 있는 한 개의 노드에만 적용해야 한다. ( books..attributes() ) -> 에러발생
2. attributes()를 사용하면 XMLList로 반환한다.
3. XMLList는 배열과 같아서 정수색인으로 값을 검색한다.
var atr:XMLList = books.item[0].attributes();
trace( atr[0] ); // 12000
trace( atr[1] ); // 이외수
* name() 메서드는 속성의 이름을 반환하여 준다.
trace( books.item[0].attributes()[0].name() ) // price
trace( books.item[0].attributes()[1].name() ) // author
* attribute() 메서드는 속성의 값을 반환한다.
trace( books.item[1].attribute("author") ); // 정윤수
* 해당 노드에 대한 모든 속성 체크
for each( var atrb:XML in books.item[1].attributes() ){
trace( "for each : " , atrb.name() , " = " , atrb.toString() )
}
[ 출력 결과 ]
for each : price = 28000
for each : author = 정윤수
for each : publisher = 제우미디어
[ E4X문법 활용 ]
trace( books.opinion.item[0].@author ) // 이문열
trace(
books..@author ) // 이외수정윤수이문열전미연정윤수
trace(
books..@price ) // 120002800026000280006500
* 가격의 합을 구한다.
var total:Number = 0;
for each( var atrb:XML in
books..@price ){
total += Number( atrb );
}
trace("가격의 합 : " , total ); // 가격의 합 : 100500
* @연산자와 대괄호 연산자를 이용
trace(
books..@["author"] ) // 이외수정윤수이문열전미연정윤수
trace(
books..@["publisher"] ) // 일지문화제우미디어샘터밝은세상21세기 북스