E4X를 사용하여 XML 처리

Flash Player 9 이상, Adobe AIR 1.0 이상

ECMAScript for XML 사양은 XML 데이터 작업을 위한 클래스 및 기능 집합을 정의합니다. 이러한 클래스와 기능을 하나로 묶어 E4X라고 합니다. ActionScript 3.0에는 XML, XMLList, QName 및 Namespace와 같은 E4X 클래스가 포함되어 있습니다.

E4X 클래스의 메서드, 속성 및 연산자는 다음을 구현할 수 있도록 디자인되었습니다.

  • 단순성 - 가능한 경우 E4X를 사용하면 XML 데이터 작업을 위한 코드를 쉽게 작성하고 이해할 수 있습니다.

  • 일관성 - E4X에 내포되어 있는 이론 및 메서드는 내부적으로 일관되고 ActionScript의 다른 요소와 일치합니다.

  • 익숙함 - 도트(.) 연산자와 같이 잘 알려진 연산자를 사용하여 XML 데이터를 조작합니다.

참고: 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));