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 Platform용 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));