Flash / Flex / ActionScript/XML/Double dot

Материал из Web эксперт
Перейти к: навигация, поиск

pull all of the attributes from the entire XML document

 
package{
  import flash.display.Sprite;
  
  public class Main extends Sprite{
    public function Main(){
        var movieList:XML = <movieList>
                                <listName>My favorite movies</listName>
                                <movie id="123">
                                    <title>Titus</title>
                                    <year>1999</year>
                                    <director>J T</director>
                                </movie>
                                <movie id="456">
                                    <title>Rushmore</title>
                                    <year>1998</year>
                                    <director>W A</director>
                                </movie>
                                <movie id="789">
                                    <title>Hall</title>
                                    <year>1977</year>
                                    <director>Woody Allen</director>
                                </movie>
                           </movieList>;
        
        trace(movieList..@*.toXMLString()); // Displays: 123
    }
  }
}



The double-dot operator works for any level of nesting

 

package{
  import flash.display.Sprite;
  
  public class Main extends Sprite{
    public function Main(){
        var author:XML = <author><name><firstName>Darron</firstName></name></author>;
        
        trace( author..firstName );
  
    }
  }
}



Use the length( ) method to count the number of elements found: trace( items.item.length( ) );

 
package{
  import flash.display.Sprite;
  
  public class Main extends Sprite{
    public function Main(){
    //    To examine every element node with a particular node name, use a for each loop
        var items:XML = <items>
                          <item>
                            <name>Apple</name>
                            <color>red</color>
                          </item>
                          <item>
                            <name>Orange</name>
                            <color>orange</color>
                          </item>
                        </items>;
        
        for each ( var name:XML in items..name ) {
          trace( name );    
        }
    }
  }
}



Using the Descendant Accessor (..) to make a deep dive to the data without worrying about the path.

 
package{
  import flash.display.Sprite;
  
  public class Main extends Sprite{
    public function Main(){
        var movieList:XML = <movieList>
                                <listName>My favorite movies</listName>
                                <movie id="123">
                                    <title>Titus</title>
                                    <year>1999</year>
                                    <director>J T</director>
                                </movie>
                                <movie id="456">
                                    <title>Rushmore</title>
                                    <year>1998</year>
                                    <director>W A</director>
                                </movie>
                                <movie id="789">
                                    <title>Hall</title>
                                    <year>1977</year>
                                    <director>Woody Allen</director>
                                </movie>
                           </movieList>;
        
        trace(movieList..title);
    }
  }
}