`
柴秉承
  • 浏览: 87892 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

as3 xml(转载)

 
阅读更多

或许,AS3最显著的变化就是引入了E4X,它是根据ECMAScript标准处理XML数据的全新机制。这使程序员能够在程序中无缝地操作XML。在AS3中可以使用XML字面值将XML数据直接写入代码,该字面值将被自动解析。

☆ActionScript中的XML入门
  ·可以将XML直接写入代码
  
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>;

  ·在字面值中使用表达式:可以将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());

  ·E4x运算符和语法简介
  
点号.用于访问XML中的元素
  属性标识符@用于访问元素的属性
  方括号[]用于根据名称或下标访问属性
  trace(employeelist.employee[0].title);
  trace(employeelist.employee[0].name.@first);

  ·理解XML类
  
每个类都表示不同的数据类型,可以在操作XML数据时使用它们。它们都位于ActionScript API的顶层,不需要import语句便可以使用它们。
  XML:XML对象表示一块简单的XML数据,如元素、文本节点、注释或处理指令。将所有这些不同的节点定义为XML对象,可以对它们使用操作XML数据的方法,而不必担心它们的类型是什么。
  XMLList:是XML对象的有序集合,包含在其中的XML数据可以是一个或多个XML对象、XML对象的部分或一些单独的节点。XML类的一些方法,如children(),将返回XMLList形式的结果。XMLList拥有许多与XML类相同的方法,大多数操作都可以交替使用。注意,XMLList中的项目是平行存在的,它们都没有父节点。

☆通过E4X访问值
  ·使用点运算符访问元素
  
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]

  ·使用方法访问子节点
  
child(propertyName:Object):XMLList
  获取特定子节点的集合,如movieList.child("movie")与movieList.movie相同,使用它可以搜索指定名称的任何子节点,如movieList.movie.child("title")
  使用propertyName参数可列出特定XML子项的内容。例如,若要返回名为<title>的子项的内容,可使用 movieList.movie.child("title")。
  使用子项的索引编号,可以生成相同的结果。索引编号标识该子项在其它XML子项列表中的位置。例如,movieList.child(0) 将返回列表中的第一个子项。
  使用星号 (*) 可输出 XML 文档中的所有子项。 例如,movieList.child("*")。

  childIndex():int
  确定该XML对象在其父项上下文中从0开始编制索引的位置。  如:trace(movieList.child(2).child("director").childIndex());trace(movieList.movie[0].year.childIndex());

  children():XMLList
  按XML对象的显示顺序列出其子项。根据下标获取子元素,如trace(movieList.children()[0].toXMLString());trace(movieList.children()[2].children()[0].toXMLString());//看起来有些怪异

  length():int
  返回特定子节点集合的长度

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

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

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

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

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

  ·访问祖先结点
  
parent()方法将返回特定XML对象的上一层的节点。

  ·迭代元素的子节点
  
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);
  }

  ·筛选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对象
  ·结合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>);

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

  ·复制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";

  ·替换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>);

☆与字符串相互转换
  
将字符串转换为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节点的元信息
  ·查找节点类型
  
要判断当前节点的类型,可以对要检查的分支使用nodeKind()方法。该方法返回一个描述节点类型的字符串:element attribute text comment processing-instruction

  ·判断节点内容的类型
  
hasSimpleContent():简单内容类型
  hasComplexContent():复杂内容类型

☆使用名称空间
  
名称空间是在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设置恢复为默认值

☆小结
  
E4X是ActionScript中用于操作XML数据的基于Web标准化方法
  可以使用E4X直接在代码中创建XML数据。与字符串和对象相似,这些XML字面值将作为值被解释
  可以使用点运算符和at运算符导航XML树。可以使用此语法设置和删除值。几乎所有运算符都有与之对应的方法。
  使用双点运算符搜索整个XML对象及其所有子节点中的项目
  在XML路径中使用两个圆括号包围逻辑语句可筛选满足特定标准集的XML项目
  使用appendChild()、preppendChild()和insertChildAfter()等方法就可以在XML树中添加额外分支
  使用XML()构造函数、toString()和toXMLString()方法实现与字符串的相互转换
  使用Namespace类和namespace()方法操作名称空间,使用::运算符访问非默认名称空间的元素
  使用nodeKind()和hasSimpleContent()方法,或使用comments()和processingInstructions()方法收集关于某个XML节点或文档的元信息
  使用类属性或访问XML类的settings()对象来设置ignoreComments等全局设置
分享到:
评论

相关推荐

    AS3 操作XML

    ### AS3操作XML知识点解析 #### 一、ActionScript 3.0与XML的基本概念 在深入了解本示例代码之前,我们首先需要了解ActionScript 3.0(简称AS3)以及XML的基本概念。 - **ActionScript 3.0**:AS3是一种面向对象...

    as3加载xml实例

    在这个“as3加载xml实例”中,我们将深入探讨如何使用AS3来加载XML文件,并将其中的数据用于显示文本和创建链接。 XML(Extensible Markup Language)是一种轻量级的、可扩展的标记语言,常用于存储和传输数据。在...

    Flashas3读写XML

    在ActionScript 3 (AS3)中,XML是一种常见的数据格式,用于存储和传输结构化信息。AS3提供了强大的XML处理能力,使得开发者能够轻松地读取、解析和操作XML文档。本文将深入探讨如何在AS3中使用Flash来读取和写入XML...

    as3+xml下拉菜单

    在本文中,我们将深入探讨如何使用ActionScript 3 (AS3) 和 XML 来创建一个灵活的下拉菜单。ActionScript 3 是Adobe Flash Professional和Flash Builder中的编程语言,而XML则是一种轻量级的数据交换格式,常用于...

    AS3 XML加载图片、倒计时和各种数据

    在ActionScript 3.0(AS3)中,XML是一种常用的数据交换格式,它轻量级、易于理解和处理。在给定的标题“AS3 XML加载图片、倒计时和各种数据”中,我们可以理解为这是一个AS3项目,它利用XML文件来存储图片的路径、...

    as3XML带缩略图照片画廊

    在这个“AS3XML带缩略图照片画廊”项目中,开发者利用AS3技术和XML数据格式来构建一个动态的照片展示系统,允许用户以画廊形式浏览带有缩略图的照片。 XML(Extensible Markup Language)是一种轻量级的标记语言,...

    Apple AS3 XML Dock Menu

    Apple AS3 XML Dock Menu 是一款基于Adobe Flash ActionScript 3(AS3)开发的菜单系统,灵感来源于苹果公司的Dock设计。这款菜单利用XML文件来存储和管理菜单项,提供了高度的可配置性和灵活性,使得开发者可以轻松...

    as 3.0读取XML

    3. 在加载完成后解析XML内容。 4. 将XML内容转换为数组。 5. 使用数组内容更新文本框显示。 在实际应用中,可能还需要处理XML加载失败的情况,例如添加`Event.ERROR`事件监听器进行错误处理。此外,XML数据可能需要...

    AS2 加载XML播放器

    在本文中,我们将深入探讨如何使用AS2创建一个XML加载的播放器,以及实现这一功能的关键知识点。 首先,理解XML的用途至关重要。XML(eXtensible Markup Language)是一种结构化数据格式,常用于存储和传输信息。在...

    模仿百度标签云效果 flashAS3 XML

    在本文中,我们将深入探讨如何使用Flash AS3和XML来创建一个模仿百度标签云的效果。首先,我们需要了解标签云的基本概念。标签云是一种常见的数据可视化技术,它将文本标签(如关键词或主题)以不同大小和颜色显示,...

    as3.0读取外部xml

    as3.0读取外部xml,使用与flex flash as3.0

    as3+xml相册源码

    AS3 + XML 相册源码是一个基于Adobe Flash ActionScript 3.0和XML技术实现的数字相册应用。ActionScript 3.0是Flash Professional中的编程语言,用于创建交互式内容,而XML则是一种轻量级的数据交换格式,常用于存储...

    as+xml导航

    3. **创建UI元素**:根据解析出的XML数据,AS2.0创建相应的舞台对象,如MovieClip或Button,设置它们的文本、位置、事件监听器等属性。 4. **响应用户交互**:当用户点击导航项时,触发的事件会调用对应的AS2.0函数...

    AS3+XML相册例子

    AS3+XML相册例子是基于ActionScript 3(AS3)编程语言和XML数据格式构建的一个互动式多媒体项目。这个相册应用充分利用了Flash的动态特性,通过XML文件来管理和展示图片信息,实现了灵活的数据驱动布局。以下是关于...

    (转载)AS3.0 音乐播放器 xml加载歌曲

    在这个音乐播放器项目中,开发者利用AS3.0构建了一个功能丰富的音乐播放器,它能通过XML文件来加载和管理歌曲列表以及歌词。XML是一种轻量级的标记语言,常用于数据交换和存储,因其结构清晰,易于读写,非常适合...

    AS3+XML+flash cs3 网站源码

    该资源是一个基于AS3(ActionScript 3)和XML的Flash CS3网站源码,用于构建动态且数据驱动的交互式网页。以下是这个项目中涉及的关键技术点和知识点的详细说明: 1. **ActionScript 3 (AS3)**: AS3是Adobe Flash...

    as3.0 flash+xml动态链接

    as3.0 flash动态添加xml链接程序

    as 实现读取xml文件并分页

    在AS(ActionScript)编程中,处理XML文件是一项常见的任务,尤其在开发Flex或Flash项目时。本示例探讨了如何使用AS实现读取XML文件并进行分页显示,这对于处理大量数据时优化用户界面体验至关重要。下面我们将详细...

    超好看的,XML+AS3导航栏-tuxming

    XML(Extensible Markup Language)和AS3(ActionScript 3)是开发富互联网应用程序(RIA)时常用的工具,尤其在Adobe Flash平台中。这个“超好看的,XML+AS3导航栏”项目,由tuxming创建,展示了如何利用这两种技术...

Global site tag (gtag.js) - Google Analytics