'E4X문법'에 해당되는 글 2건

  1. 2008.09.20 XML 특성(Attributes) 읽기
  2. 2008.09.20 원소(노드)이름으로 원소 찾기
AS3.0 Cookbook/XML2008. 9. 20. 17:59

XML에는 원소,  즉 노드 말고도 노드에 포함된 속성(특성)이 있다. 이 값을 읽어 오기 위해서는 AS3에서 제공하는 attributes()를 사용하여 값을 읽어오거나 E4X문법을 사용하여 읽어 올 수 있다.
또한 AS3에서 name()를 사용하여 속성의 이름을 알 수 도있다.

var books:XML =  <books> 
          <item price="12000" author="이외수" publisher="일지문화">삶의 길</item>
          <item price="28000" author="정윤수" publisher="제우미디어">플래시 (모션+액션)</item>
           <opinion>
            <item price="26000" author="이문열" publisher="샘터">그의 아버지</item>
            <item price="28000" author="전미연" publisher="밝은세상">사랑하기 때문에</item>
            <poem>
             <item price="6500" author="정윤수" publisher="21세기 북스">시간</item>
            </poem>
           </opinion>
         </books>;


[ AS3.0의 메서드 활용 ]
1. attributes() 메서드는 속성이 있는 한 개의 노드에만 적용해야 한다. ( books..attributes() ) -> 에러발생
2. attributes()를 사용하면 XMLList로 반환한다.
3. XMLList는 배열과 같아서 정수색인으로 값을 검색한다. 


var atr:XMLList = books.item[0].attributes();
trace( atr[0] );       // 12000
trace( atr[1] );       // 이외수

   
* name() 메서드는 속성의 이름을 반환하여 준다.
trace( books.item[0].attributes()[0].name() )     // price
trace( books.item[0].attributes()[1].name() )     // author
   
* attribute() 메서드는 속성의 값을 반환한다.
trace( books.item[1].attribute("author") );          // 정윤수

* 해당 노드에 대한 모든 속성 체크
for each( var atrb:XML in books.item[1].attributes() ){
    trace( "for each : " , atrb.name() , " = " , atrb.toString()  )
   }
[ 출력 결과 ]
for each :  price  =  28000
for each :  author  =  정윤수
for each :  publisher  =  제우미디어

[ E4X문법 활용 ]
trace( books.opinion.item[0].@author )           // 이문열
trace( books..@author )                                // 이외수정윤수이문열전미연정윤수
trace( books..@price )                                  // 120002800026000280006500

   
* 가격의 합을 구한다.
var total:Number = 0;
for each( var atrb:XML in books..@price ){
    total += Number( atrb );
}
trace("가격의 합 : " , total );                         // 가격의 합 :  100500
   
* @연산자와 대괄호 연산자를 이용
trace( books..@["author"] )                         // 이외수정윤수이문열전미연정윤수
trace( books..@["publisher"] )                     // 일지문화제우미디어샘터밝은세상21세기 북스



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 버터백통