ActionScript 3操作XML 详解

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
对拥有多个相同类型节点的元素,需要以数组的方式访问,如 movieList.movie[0]

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返回特定子节点集合的长度

E、 name():Object返回正在访问的子节点的节点名称。

F、 elements(name:Object = *):XMLList 列出某XML对象的元素。

3.使用at运算符@访问属性

trace(movieList.child("movie")[0][email protected]);
如果要访问某标记的所有属性,可以使用*号,如trace(movieList.child("movie")[0][email protected]*);
与.运算符对应的方法是child()和children()
与@运算符对应的方法是attribute()和attributes()

4.访问元素中的文本

 要明确的返回某个元素的文本节点,可以使用text()方法,该方法返回一个由文本节点组成的XMLList。
 注意:操作XML时,toString()返回节点的值(可以为空),toXMLString()返回节点和其中的文本。

5.访问祖先节点、访问子孙节点

E4X中的一个非常强大的特性就是能够直接访问子孙节点。使用子孙节点存取程序运算符(..),可以深入访问元素中的节点,而不用担心该节点的路径是什么。这种方法不仅适用于元素,而且还适用于属性和其他类型的XML对象。
  trace(movieList..title);//这个我真帅
  trace([email protected]*.toXMLString());
  此运算符对应的方法为:descendants()
  使用此方法时需要注意一点,它会返回所有匹配的结果,即使树的不同层次上的标记拥有相同的名称也是如此。

访问祖先结点
  parent()方法将返回特定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中。
  var movies:XMLList=movieList.movie.(year>1985);
  trace(movies);
  movies=movieList.movie.(@id=="789");
  trace(movies);
  movies=movieList.movie.(director.search("W")!=-1 && title.search(" ")==-1);
  trace(movies);

四、构建XML对象

1.结合XML节点

与合并字符串类似,可以使用+或+=运算符将额外的子元素添加到某个XMLList中。所添加的值不需要与XML对象中其他元素保持相同的格式。可以使用+和+=运算符将额外的节点添加到具体元素中。

var anotherMovie:XML=<movie id="222">
   <title>Tron</title>
   <year>1982</year>
   <director>Steven Lisberger</director>
  </movie>;
  movieList.movie+=anotherMovie;

appendChild():与+=类似,将值添加到XML对象或XMLList的末尾。
  prependChild():将值添加到对象的开始部分。
  insertChildAfter()、insertChildBefore():将值添加到指定位置。

  movieList.movie[0].appendChild(<area>你</area>);
  movieList.movie[1].prependChild(<area>真</area>);
  movieList.movie[2].insertChildBefore(movieList.movie[2].year,<area>棒</area>);
  movieList.movie[3].insertChildAfter(movieList.movie[3].year,<area>呀</area>);

2.删除XML节点

与结合XML结点不同,没有任何方法可以删除XML节点,相反,只能使用delete运算符。该运算符用于从树中删除指定的元素或值。
  delete [email protected]*;//删除所有属性
  delete movieList.movie[1];

3.复制XML对象

 使用copy方法复制XML对象。
  var template:XML=<person><name><first /><last /></name></person>;
  var me:XML=template;//me引用template,对me的修改也是对template的修改
  var it:XML=template.copy();//创建副本
  me.name.first="First Name";
  me.name.last="Last Name";

4.替换XML节点中的值

setChildren()方法可以一次替换XML对象中的所有节点
replace()方法则替换XML对象中的单个节点
var m123:XMLList=movieList.movie.(@id==123);
//m123.setChildren(null);
m123.setChildren(<title>Avatar</title>+<year>2009</year>+<director>Cameron</director>);//注意使用+号连接多个节点
m123.replace("title",<title>阿凡达</title>);

5.与字符串相互转换

将字符串转换为XML时需要格外注意,只能使用格式良好的XML文本,操作失败将会造成运行时错误。
  var xml:XML=XML(xmlString);
  美观打印
  XML.prettyPrinting:默认值为true,将其设置为false时,XML字符串将自动格式化、删除空标记和额外的空白符。
  XML.prettyIndent:默认值为2,设置缩进的空格数

五、从外部资源加载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():简单内容类型
hasComplexContent():复杂内容类型

七、使用命名空间、使用注释和处理命令、设置XML类型选项

☆使用名称空间
  
名称空间是在XML中使用的一种约定,其作用是将功能相似的XML元素和属性归入同一集合中,这与使用包对类进行分类极为相似。XML文件将在名称空间声明中定义名称空间的名称和一个惟一的标识符,用于将它与其他名称空间区分开来。
  var ns:Namespace=new Namespace(uri);//省略前缀
  var ns:Namespace=new Namespace(prefix,uri);
  示例
  var diffbook:XML=<book xmlns:bible="http://www.gaobar.cn">
   <bible:chapter>Working with XML</bible:chapter>
  </book>;
  可以使用名称空间访问节点——双冒号(::)结合名称空间对象来访问非默认名称空间的节点,如
  var bible:Namespace=diffbook.namespace("bible");
  trace(bible);//http://www.gaobar.cn
  trace(bible.prefix);//bible
  trace(bible.uri);//http://www.gaobar.cn
  trace(diffbook.bible::chapter);//Working with XML
  trace(diffbook.bible::chapter.name());//http://www.gaobar.cn::chapter
  trace(diffbook.bible::chapter.localName());//chapter
  相关方法addNamespace()、removeNamespace()、setNamespace()、localName()参阅帮助文档。

☆使用注释和处理指令
  
代码中包含的XML注释块和处理指令都不是节点,要访问这些值,可以使用comments()和processingInstructions()方法分别获取注释和处理指令的XMLList。
  注意,静态属性ignoreComments和ignoreProcessingInstructions的默认值都是true,需要将它们设置为false才能保证comments()和processingInstructions()方法能够正常运行。

☆设置XML类的选项
  
ignoreWhitespace
  ignoreComments
  ignoreProcessingInstructions
  prettyPrinting
  prettyIndent
  可以使用settings()静态方法访问所有这些设置,它将返回一个含有各变量值的对象。
  还可以使用defaultSettings()静态方法获取所有这些属性的默认值,setSettings()静态方法可用于将settings对象修改为新Object。
  XML.setSettings(XML.defaultSettings());//将XML设置恢复为默认值

时间: 2024-10-19 17:29:17

ActionScript 3操作XML 详解的相关文章

PHP操作XML详解

XML是一种流行的半结构化文件格式,以一种类似数据库的格式存储数据.在实际应用中,一些简单的.安全性较低的 数据往往使用 XML文件的格式进行存储.这样做的好处一方面可以通过减少与数据库的交互性操作提高读取效率,另一方面可以有效利用 XML的优越性降低程序的编写难度.        PHP提供了一整套的读取 XML文件的方法,很容易的就可以编写基于 XML的脚本程序.本章将要介绍 PHP与 XML的操作方法,并对几个常用的 XML类库做一些简要介绍. 1 XML简介 XML是“可扩展性标识语言(

Ant之build.xml详解

Ant的概念 可能有些读者并不连接什么是Ant以及入可使用它,但只要使用通过Linux系统得读者,应该知道make这个命令.当编译Linux内核及一些软件的源程序时,经常要用这个命令.Make命令其实就是一个项目管理工具,而Ant所实现功能与此类似.像make,gnumake和nmake这些编译工具都有一定的缺陷,但是Ant却克服了这些工具的缺陷.最初Ant开发者在开发跨平台的应用时,用样也是基于这些缺陷对Ant做了更好的设计. Ant 与 makefile Makefile有一些不足之处,比如

Tomcat主配置文件Server.xml详解

Tomcat主配置文件Server.xml详解 1.软件版本 [[email protected] META-INF]# java -version java version "1.8.0_60" Java(TM) SE Runtime Environment (build 1.8.0_60-b27) Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode) 2.server.xml组件类别 顶级组件:位于整个配置的

T-SQL 操作文件 详解

/*******  导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S"GNETDATA/GNETDATA" -U"sa" -P""' /***********  导入Excel SELECT * FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0', 'Data Source="

Web.xml详解(转)

这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢迎大家一起讨论. ---题记 一.            Web.xml详解: (一)  web.xml加载过程(步骤) 首先简单说一下,web.xml的加载过程. 当我们去启动一个WEB项目时,容器包括(JBoss.Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来. l  启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点: 

Spring Data操作Redis详解

Spring Data操作Redis详解 Redis是一种NOSQL数据库,Key-Value形式对数据进行存储,其中数据可以以内存形式存在,也可以持久化到文件系统.Spring data对Redis进行了很好的封装,用起来也是十分的得心应手.Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted se

转载 logback的使用和logback.xml详解 http://www.cnblogs.com/warking/p/5710303.html

logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集

SAX解析XML 详解

JAVA 解析 XML 通常有两种方式,DOM 和 SAX.DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用 DOM 的标准接口来操作这个树结构.但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的.     SAX是一种XML解析的替代方法.相比于文档对象模型DOM,SAX 是读

logback的使用和logback.xml详解,在Spring项目中使用log打印日志

logback的使用和logback.xml详解 一.logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件,官方网站: http://logback.qos.ch.它当前分为下面下个模块: logback-core:其它两个模块的基础模块 logback-classic:它是log4j的一个改良版本,同时它完整实现了slf4j API使你可以很方便地更换成其它日志系统如log4j或JDK14 Logging logback-access:访问模块与Servlet容器集