AS3引入了E4X ,它是根据ECMAScript标准处理XML 数据的全新机制。这使得程序员在程序中无缝地操作XML。在AS3中可以使用XML字面值将XML数据直接写入代码,该字面值将被自动解析。 一、AS3中的XML入门 1.可以将XML直接写入代码
public var employeelist:XML=<employeelist> <employee> <name first="Conan" last="O'Brien" /> <title>Host</title> </employee> <employee> <name first="Andy" last="Richter" /> <title>SideKick</title> </employee> </employeelist>;
2.在字面值中使用as3的表达式:可以将ActionScript代码直接嵌入到XML数据中,方法时将希望添加的代码包围在大括号{}中,这样便可以使用动态生成的值填充数据集合。
var efname:String="A"; var elname:int=1; var etitle:String="+"; var employeelist:XML=<employeelist> <employee> <name first={efname} last={elname} /> <title>{etitle}</title> </employee> </employeelist>; trace(employeelist.toXMLString());
二、理解XML类 每个类都表示不同的数据类型,可以在操作XML数据时使用它们。它们都位于ActionScript API 的顶层,不需要import 语句便可以使用它们。 XML:XML对象表示一块简单的XML数据,如元素、文本节点、注释或处理指令。将所有这些不同的节点定义为XML对象,可以对它们使用操作XML数据的方法,而不必担心它们的类型是什么。 XMLList :是XML对象的有序集合,包含在其中的XML数据可以是一个或者多个XML对象,XML对象的部分或一些单独的节点。XML类的一些方法,如children() ,将返回XMLList形式的结果。XMLList拥有许多与XML类相同的方法,大多数操作都可以交替使用。注意,XMLList中的项目是平行存在的,它们都没有父节点。
三、通过E4X访问XML 1.使用点运算符访问元素 public var movieList:XML=<movieList> <listName>My Favorite movies</listName> <movie id="123"> <title>Titus</title> <year>1999</year> <director>Julie Taymor</director> </movie> <movie id="456"> <title>Rushmore</title> <year>1998</year> <director>Wes Anderson</director> </movie> <movie id="789"> <title>Annie Hall</title> <year>1977</year> <director>Woody Allen</director> </movie> </movieList>; 使用点运算符可以访问movieList中的任何元素。只需要将访问的元素作为movieList对象的属性,写出塔的名称即可,如:movieList.listName 2.使用方法访问子节点 A、 child(propertyName:Object):XMLList 获取特定子节点集合,如movieList.child("movie") 与movieList .movie相同,使用它可以搜索指定名称的任何字节点,如movieList.movie.child("title") 。 使用propertyName参数可列出特定XML子项的内容。列如,若要返回名为<title> 使用子项的索引编号,可以生成相同的结果。索引编号标示该子项在其XML子项列中的位置。例如,movieList.child(0)将返回列表中的第一个子项。 使用星号(*)可以返回xml文档中所有的子项,例如,moveList.child("*").
B、childIndex():int 确定该XML对象在其父项上下文中从0开始编制索引的位置。 如:trace(movieList.child(2).child("director").childIndex()); trace(movieList.movie[0].year.childIndex());
C、 children():XMLList 按XML对象的显示顺序列出其子项。根据下标获取子元素,如: trace(movieList.children()[0].toXMLString()); trace(movieList.children()[2].children()[0].toXMLString()); D、 length():int返回特定子节点集合的长度
3.使用at运算符@访问属性 trace(movieList.child("movie")[0].@id);
4.访问元素中的文本
要明确的返回某个元素的文本节点,可以使用text()方法,该方法返回一个由文本节点组成的XMLList。
5.访问祖先节点、访问子孙节点
E4X中的一个非常强大的特性就是能够直接访问子孙节点。使用子孙节点存取程序运算符(..),可以深入访问元素中的节点,而不用担心该节点的路径是什么。这种方法不仅适用于元素,而且还适用于属性和其他类型的XML对象。 访问祖先结点 6.迭代元素的子节点 XMLList类似专用于存储XML数据段的数组,它们与数组一样拥有长度和下标,可以像操作数组那样对它们执行迭代操作。 var movieTitles:Array=new Array(); var movies:XMLList=movieList.movie; for(var i:int=0;i<movies.length();i++){ movieTitles[i]=movies[i].title.text(); } movieTitles.sort(); trace(movieTitles); 此外,可以使用for...in或for each...in语句迭代XMLList对象 var movies:XMLList=movieList.movie; for(var movie:String in movies){ trace(movies[movie].title); } var movies:XMLList=movieList.movie; for each(var movie:XML in movies){ trace(movie.title); }
7.筛选XML中的项目 EX4增加了一种强大的功能:使用XML圆括号筛选运算符动态地筛选数据。在XML树中创建路径时,可以在圆括号中间添加一个布尔表达式形式的搜索来判断条件,符合搜索条件的任何节点都将返回到一个XMLList中。 四、构建XML对象 1.结合XML节点 与合并字符串类似,可以使用+或+=运算符将额外的子元素添加到某个XMLList中。所添加的值不需要与XML对象中其他元素保持相同的格式。可以使用+和+=运算符将额外的节点添加到具体元素中。 var anotherMovie:XML=<movie id="222">
2.删除XML节点 与结合XML结点不同,没有任何方法可以删除XML节点,相反,只能使用delete运算符。该运算符用于从树中删除指定的元素或值。
3.复制XML对象 使用copy方法复制XML对象。 4.替换XML节点中的值 setChildren()方法可以一次替换XML对象中的所有节点 5.与字符串相互转换 将字符串转换为XML时需要格外注意,只能使用格式良好的XML文本,操作失败将会造成运行时错误。 五、从外部资源加载XML数据
import flash.net.*; var movieList:XML; var url:URLRequest=new URLRequest("movieList.xml"); var loader:URLLoader=new URLLoader(url); loader.addEventListener(Event.COMPLETE,onLoadCompleted); function onLoadCompleted(e:Event):void{ if(loader.data){ movieList=XML(loader.data); trace(movieList); } };
六、收集XML节点的元信息 1.查找节点类型 要判断当前节点的类型,可以对要检查的分支使用nodeKind()方法。该方法返回一个描述节点类型的字符串:element attribute text comment processing-instruction 2.判断节点内容的类型
hasSimpleContent():简单内容类型
七、使用命名空间、使用注释和处理命令、设置XML类型选项 ☆使用名称空间 |
|