AS3.0 Cookbook/XML2008. 9. 20. 17:43

XML문서에 포함된 데이터를 AS3의 데이터 타입으로 변환시킨다.
var xml2:XML = <Test>
         <bool>false</bool>
         <int>20</int>
         <number>0.5</number>
        </Test>
var bool:Boolean = Boolean( xml2.bool )
var int:int = int( xml2.int ) + 10
var number:Number =  Number( xml2.number ) + 1;


특별히 문자나 숫자는 String() , Number() , int()등을 사용하여 캐스팅하면 되지만
Boolean같은 경우 조건문을 사용하여 부울값을 리턴 받아 대입하여야 한다. 또한 XML의 데이터가 True 또는 TRUE등으로 대소문자가 섞였을 경우를 대비하여 toLowerCase() 메서드를 이용하여 모두 소문자로 체크한다.

* 값을 체크하면 true로 설정되어있다. 따라서 정상적으로 Boolean으로 사용할 수 없다.
if(bool) trace("비정상 체크 true : " , bool);
else trace("비정상 체크 false : " , bool);
    
* XML데이터는 문자열이므로 아래처럼 정상적으로 Boolean값으로 성정한다.
bool =  String( xml2.bool ).toLowerCase() == "true";
if(bool) trace("정상 체크 true : " , bool);
else trace("정상 체크 false : " , bool);
Posted by 버터백통
AS3.0 Cookbook/XML2008. 9. 20. 17:32
E4X를 통해 XML 객체를 Object 객체처럼 사용할 수 있으며 접근 할 수 있다.
또한 .. 을 통해 중간의 노드 이름을 생략할 수 있다.

var xml:XML =
        <Test>
         <menu>
          <item>
           <name>Apple</name>
           <color>Red</color>
          </item>
         </menu>
         <menu>
          <item>
           <name>Orange</name>
           <color>Yellow</color>
          </item>
         </menu>
        </Test>;

   
* 노드를 찾기할때 root node는 생략한다.  
trace( xml.menu )     
 <menu>
  <item>
    <name>Apple</name>
    <color>Red</color>
  </item>
</menu>
<menu>
  <item>
    <name>Orange</name>
    <color>Yellow</color>
  </item>
</menu>


trace("**************** \n" , xml.menu.item )
<item>
  <name>Apple</name>
  <color>Red</color>
</item>
<item>
  <name>Orange</name>
  <color>Yellow</color>
</item>

trace("**************** \n" , xml.menu.item.name )
 <name>Apple</name>
<name>Orange</name>

* .. 중간노드를 생략하고 찾는 노드명을 서브에서 찾아준다.  
trace("**************** \n" , xml..name )
 <name>Apple</name>
<name>Orange</name>

trace("**************** \n" , xml.menu[0].item )
 <item>
  <name>Apple</name>
  <color>Red</color>
</item>

trace("**************** \n" , xml.menu[1].item )  
 <item>
  <name>Orange</name>
  <color>Yellow</color>
</item>

trace("**************** \n" , xml.menu[0]..color )
Red

trace("**************** \n" , xml.menu[1]..color
Yellow
Posted by 버터백통
AS3.0 Cookbook/XML2008. 9. 20. 17:16

E4X 언어 확장의 일부로 도입된 for each..in 문은 XML 객체뿐만 아니라 Object 및 Array에 대해서도 사용할 수 있습니다.

 1) for each..in 문은 객체의 속성 중 고정된 속성은 제외하고 동적 속성만 반복합니다. 
 2) 고정된 속성은 클래스 정의의 일부로 정의된 속성입니다.

for each..in 문을 사용자 정의 클래스의 인스턴스와 함께 사용하려면 dynamic 속성을 사용하여 클래스를 선언해야 합니다.

* for..in 문과는 달리 for each..in 문은 속성 이름 대신 객체의 속성 값을 반복합니다.
   - for in : 객체의 속성 이름을 반환
   - for each in : 객체의 속성 값을 반환

var menu:XML =  <menu>
<menuItem label="File" size="100kb">
<menuItem label="New" size="200kb" />
</menuItem>
<menuItem label="Help" size="300kb">
<menuItem label="About" size="400kb" />
</menuItem>
this is Text Node
</menu>;

for each ( var element:XML in menu.elements() )
{
    trace(
element.@label );
    trace(
element.@size );
}

[ 출력 결과 ]
File
100kb
Help
300kb
walk label :  File
walk size :  100kb
walk label :  New
walk size :  200kb
walk label :  Help
walk size :  300kb
walk label :  About
walk size :  400kb


* elements() 메서드는 XML의 모든 자식노드를 XMLList로 반환한다.

Posted by 버터백통