E4X를 사용하여 XML 처리Flash Player 9 이상, Adobe AIR 1.0 이상 ECMAScript for XML 사양은 XML 데이터 작업을 위한 클래스 및 기능 집합을 정의합니다. 이러한 클래스와 기능을 하나로 묶어 E4X라고 합니다. ActionScript 3.0에는 XML, XMLList, QName 및 Namespace와 같은 E4X 클래스가 포함되어 있습니다. E4X 클래스의 메서드, 속성 및 연산자는 다음을 구현할 수 있도록 디자인되었습니다.
참고: ActionScript 2.0에는 다른 XML 클래스가 있습니다. ActionScript 3.0에서는 이 클래스가 E4X에 포함된 ActionScript 3.0 XML 클래스와 충돌하지 않도록 XMLDocument로 이름이 바뀌었습니다. ActionScript 3.0에서는 이전 클래스, 즉 XMLDocument, XMLNode, XMLParser 및 XMLTag가 이전 버전을 지원하기 위해 flash.xml 패키지에 포함되어 있습니다. 새로 추가된 E4X 클래스는 기본 클래스이므로 사용할 때 패키지를 가져올 필요가 없습니다. 이전 ActionScript 2.0 XML 클래스에 대한 자세한 내용은 Adobe Flash 플랫폼용 Adobe ActionScript 3.0 참조 설명서의 flash.xml 패키지를 참조하십시오.
다음은 E4X를 사용하여 데이터를 조작하는 예제입니다. var myXML:XML = <order> <item id='1'> <menuName>burger</menuName> <price>3.95</price> </item> <item id='2'> <menuName>fries</menuName> <price>1.45</price> </item> </order> 대개 응용 프로그램에서는 웹 서비스 또는 RSS 피드와 같은 외부 소스에서 XML 데이터를 로드합니다. 그러나 사용자가 쉽게 이해할 수 있도록 여기에서 제공된 코드 예제는 XML 데이터를 리터럴로 할당합니다. 다음 코드와 같이 E4X에는 도트(.) 및 특성 식별자(@) 연산자처럼 XML에서 속성과 특성에 액세스하는 데 사용할 수 있도록 직관적인 연산자가 포함되어 있습니다. trace(myXML.item[0].menuName); // Output: burger trace(myXML.item.(@id==2).menuName); // Output: fries trace(myXML.item.(menuName=="burger").price); // Output: 3.95 다음 코드 예제와 같이 appendChild() 메서드를 사용하면 새 자식 노드를 XML에 지정할 수 있습니다. var newItem:XML = <item id="3"> <menuName>medium cola</menuName> <price>1.25</price> </item> myXML.appendChild(newItem); 다음과 같이 @ 및 . 연산자를 사용하면 데이터를 읽을 수 있을 뿐만 아니라 지정할 수도 있습니다. myXML.item[0].menuName="regular burger"; myXML.item[1].menuName="small fries"; myXML.item[2].menuName="medium cola"; myXML.item.(menuName=="regular burger").@quantity = "2"; myXML.item.(menuName=="small fries").@quantity = "2"; myXML.item.(menuName=="medium cola").@quantity = "2"; 다음과 같이 for 루프를 사용하면 XML의 노드를 반복할 수 있습니다. var total:Number = 0; for each (var property:XML in myXML.item) { var q:int = Number(property.@quantity); var p:Number = Number(property.price); var itemTotal:Number = q * p; total += itemTotal; trace(q + " " + property.menuName + " $" + itemTotal.toFixed(2)) } trace("Total: $", total.toFixed(2)); |
|