E4X란
E4X는 ECMAScript for XML의 약자로서, XML Document Object Model의 대안으로 발전을 하였다. 현재 E4X는 Adobe ActionScript와 FireFox에 의해서 지원을 받고 있다.
E4X의 소개
우선 E4X의 형식을 살펴보자.
- var data:XML =
- <items>
- <item name="Wii">
- <source>Amazon</source>
- <price>364.00</price>
- </item>
- <item name="Wii">
- <source>Target</source>
- <price>249.99</price>
- </item>
- <item name="X-Box 360">
- <source>Amazon</source>
- <price>399.99</price>
- </item>
- <item name="PlayStation 3">
- <source>Amazon</source>
- <price>599.99</price>
- </item>
- </items>;
간단히 변수를 XML형식으로 선언하고, 일반적인 XML문서를 작성해주면 된다.
이제는 다른 Looping을 하지 않고도 필요한 정보를 얻기위하여 XML 데이타를 찾는것이 가능하다.
var itemNames:XMLList = data.item.@name;
예제를 보면, XML 데이타에서 item의 Attribute가 name이 정의되어있는 모든 XML리스트를 얻어온다. 여기에서 사용되는 @심볼은 Element와 Attribute를 구별하는데 사용된다.
그러면 Element의 값이 Amazon인 리스트를 얻기 위해서는 어떻게 해야하는가?
var amazonItems:XMLList = data.item.(source == "Amazon");
그냥 간단히 Element를 선택하고 자식Element를 괄호를 사용해서 묶어주고, '=='기호를 사용해서 얻어 오면 되는것이다.
그런데 여기서 재미있는것은 괄호안에다 ActionScript의 Function을 사용할수있다는 것이다. 다음을 보자.
data.item.(trace(@name));
이 경우에는 단지 모든 item Element를 순환하면서 name Attribute의 값을 출력을 한다.
다음으로는 조건이 하나 이상인 경우는 &&나 ||의 기호를 사용해서 조건을 연결할 수도 있다.
var items:XMLList = data.item.(source == "Amazon" && price < 400);
이경우는 item Element의 자식 Element중에서 source가 "Amazon"이고 price가 400이하인 경우를 추출하게 된다.
그런데 만약에 Attribute나 자식Element의 이름을 변수로 받는 경우에는 어떻게 해야하는가 고민이 될것이다. 이 경우에는 단지 attribute()함수와 child()함수를 사용하기만 하면 된다.
- var filterBy:String = "name";
- var filterValue:String = "Wii";
- var items:XMLList = data.item.(attribute(filterBy) == filterValue);
E4X에서 네임스페이스 사용하기
그러면, 이제부터는 XML에 네임스페이스가 포함되어진 경우의 사용법을 알아본다.
E4X에서 네임스페이스를 사용하는데는 2가지 방법이 있는데 첫번째는 쿼리에서 직접네임스페이스를 사용하는 법과 네임스페이스를 전역적으로 선언하는 방법이 있다.
var temp:int = rss.channel.item.yweather::condition.@temp;
이와 같이 네임스페이에는 "::"을 사용하여 구별한다.