Flash / Flex / ActionScript/XML/child

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

Access child nodes using E4X"s more convenient properties wildcard (*).

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var rootElementName:String = "BOOK";
       var rootAttributeName:String = "ISBN";
       var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
       var bookISBN:String = "0000000000";
       var bookTitle:String = "ActionScript";
       var bookAuthor:String = "J, J";
       var bookPublisher:String = "Books Ltd";
       var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
           <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
           <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
           <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
         </{rootElementName}>;
       trace(novel);
   }
 }

}

       </source>
   
  


appendChild to XML value

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var example:XML = <example/>;
       
       example.appendChild( <two>2</two> );
       
       example.prependChild( <one>"number 1"</one> );
       
       example.insertChildAfter( example.one[0], 1.5 );
       example.insertChildBefore( example.two[0], <part>1.75</part> );
       
       trace( example );
   }
 }

}

       </source>
   
  


Delete all children contained by an element

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var novel:XML = <BOOK ISBN="0000000000">
           <TITLE>ActionScript</TITLE>
           <AUTHOR>J, J</AUTHOR>
           <PUBLISHER>Books Ltd</PUBLISHER>
         </BOOK>;
       trace(novel);
       delete novel.*;  
       trace(novel);
   }
 }

}

       </source>
   
  


Get tag child

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var rootElementName:String = "BOOK";
       var rootAttributeName:String = "ISBN";
       var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
       var bookISBN:String = "0000000000";
       var bookTitle:String = "ActionScript";
       var bookAuthor:String = "J, J";
       var bookPublisher:String = "Books Ltd";
       var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
           <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
           <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
           <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
         </{rootElementName}>;
       trace(novel.children());
   }
 }

}

       </source>
   
  


Get the first child in a list of child nodes

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var rootElementName:String = "BOOK";
       var rootAttributeName:String = "ISBN";
       var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
       var bookISBN:String = "0000000000";
       var bookTitle:String = "ActionScript";
       var bookAuthor:String = "J, J";
       var bookPublisher:String = "Books Ltd";
       var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
           <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
           <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
           <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
         </{rootElementName}>;
      
       trace(novel.children()[0]);
   }
 }

}

       </source>
   
  


Get the last child in a list of child nodes: theNode.children( )[theNode.children().length( )-1]

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var rootElementName:String = "BOOK";
       var rootAttributeName:String = "ISBN";
       var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
       var bookISBN:String = "0000000000";
       var bookTitle:String = "ActionScript";
       var bookAuthor:String = "J, J";
       var bookPublisher:String = "Books Ltd";
       var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
           <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
           <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
           <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
         </{rootElementName}>;
       
       trace(novel.children(  )[novel.children().length(  )-1]);
   }
 }

}

       </source>
   
  


prependChild, insertChildAfter, insertChildBefore

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var example:XML = <example>
                             <b />
                             <d />
                             <f />
                         </example>;
       example.appendChild(<g />);
       trace(example);
       
       example.prependChild(<a />);
       trace(example);
       
       example.insertChildAfter(example.b, <c />);
       trace(example);
       
       example.insertChildBefore(example.f, <e />);
       
       trace(example);
   }
 }

}

       </source>
   
  


Removes one element from its parent element

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var novel:XML = <BOOK ISBN="0000000000">
           <TITLE>ActionScript</TITLE>
           <AUTHOR>J, J</AUTHOR>
           <PUBLISHER>Books Ltd</PUBLISHER>
         </BOOK>;
       trace(novel);
       delete novel.TITLE;
       trace(novel);
   }
 }

}

       </source>
   
  


Replacing Values in XML Nodes: the setChildren() method.

   <source lang="java">

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>;
       
       movieList.movie.(@id == 123).setChildren(null);
       trace(movieList.movie.(@id == 222).toXMLString());
       
       movieList.movie.(@id == 123).setChildren(<title>Sleep</title> +
                                                <year>2006</year> +
                                                <director>M G</director> +
                                                <genre>Romance</genre>);
       trace(movieList.movie.(@id == 123).toXMLString());
   }
 }

}

       </source>
   
  


Returns all child elements of BOOK named AUTHOR

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var rootElementName:String = "BOOK";
       var rootAttributeName:String = "ISBN";
       var childElementNames:Array = ["TITLE", "AUTHOR", "PUBLISHER"];
       var bookISBN:String = "0000000000";
       var bookTitle:String = "ActionScript";
       var bookAuthor:String = "J, J";
       var bookPublisher:String = "Books Ltd";
       var novel:XML = <{rootElementName} {rootAttributeName}={bookISBN}>
           <{childElementNames[0]}>{bookTitle}</{childElementNames[0]}>
           <{childElementNames[1]}>{bookAuthor}</{childElementNames[1]}>
           <{childElementNames[2]}>{bookPublisher}</{childElementNames[2]}>
         </{rootElementName}>;
       
       trace(novel.AUTHOR);  // 
   }
 }

}

       </source>
   
  


Use insertChildBefore( ) and insertChildAfter( ) to modify an XML tree

   <source lang="java">

package{

 import flash.display.Sprite;
 
 public class Main extends Sprite{
   public function Main(){
       var example:XML = <example/>;
       
       example.two = "";
       
       // Before the two element node, add a one element node
       example = example.insertChildBefore( example.two, <one /> );
       
       // After the two element node, add a three element node
       example = example.insertChildAfter( example.two, <three /> );
       
       trace( example );
   }
 }

}

       </source>
   
  


Using child(), you can search the element for any children with a given name.

   <source lang="java">

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.child("year"));
   }
 }

}

       </source>
   
  


Using XML Methods to Combine Values

   <source lang="java">

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>;
       
       movieList.movie[0].appendChild(<genre>Drama</genre>);
       movieList.movie[1].appendChild(<genre>Comedy</genre>);
       movieList.movie[2].appendChild(<genre>Sci-Fi</genre>);
       trace(movieList.movie);
   }
 }

}

       </source>
   
  


You can also use the children() method to get a child by index rather than node name.

   <source lang="java">

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.children()[0].toXMLString());
       
       trace(movieList.children()[2].children()[0].toXMLString());
   }
 }

}

       </source>