当前位置: 首页 > 编程日记 > 正文

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

4.访问元素中的文本

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

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

E4X中的一个非常强大的特性就是能够直接访问子孙节点。使用子孙节点存取程序运算符(..),可以深入访问元素中的节点,而不用担心该节点的路径是什么。这种方法不仅适用于元素,而且还适用于属性和其他类型的XML对象。
  trace(movieList..title);//这个我真帅
  trace(movieList..@*.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 movieList.movie.@*;//删除所有属性
  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设置恢复为默认值

相关文章:

kubernetes关键特性和概述

kubernetes关键特性和概述 https://blog.csdn.net/u014042372/article/details/80573213 posted on 2019-08-16 11:23 竹径风声 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/girl1314/p/11362768.html

Blender创作你自己的动画短片学习教程

Filmmaking with Blender – Create your own animated Short Film 时长:1h 20m |视频:. MP4 1280720&#xff0c;30 fps(r) |音频:AAC&#xff0c;44100 Hz&#xff0c;2ch |大小:1G 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 在本课…

Java学习总结:57(Properties子类)

Properties子类 Properties类本身是Hashtable的子类&#xff0c;但是由于Properties类都使用String数据类型进行操作&#xff0c;所以在使用Properties类时主要使用本类所定义的方法。Properties类常用方法如下&#xff1a; No.方法类型描述1public Object setProperty(Strin…

openwrt入门

一、安装Ubuntu(在vware安装) 注意使用图形系统 二、安装openwrt开发工具 1.打开命令窗CtrlAltT&#xff0c;切换到root用户&#xff1a;sudo -sH或sudo su&#xff0c;退出root用户&#xff1a;CtrlD或exit 2.切换到root&#xff0c;下载安装组件&#xff08;apt-get install …

2022-2028年中国大飞机项目产业链分析及投资咨询报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国大飞机项目行业市场行业相关概述、中国大飞机项目行业市场行业运行环境、分析了中国大飞机…

一种可以避免数据迁移的分库分表scale-out扩容方式

原文地址&#xff1a;http://jm-blog.aliapp.com/?p590目前绝大多数应用采取的两种分库分表规则mod方式dayofweek系列日期方式&#xff08;所有星期1的数据在一个库/表,或所有?月份的数据在一个库表&#xff09;这两种方式有个本质的特点&#xff0c;就是离散性加周期性。例如…

openstack对比其他有什么优点

openstack对比其他有什么优点 &#xff08;1&#xff09;模块松耦合。与其他开源软件相比&#xff0c;OpenStack模块分明。添加独立功能的组件非常简单。有时候&#xff0c;不需要通读整个OpenStack的代码&#xff0c;只需要了解其接口规范及API使用&#xff0c;就可以轻松地添…

C#和Unity编码和游戏开发学习教程

MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:110节课(26小时25分钟)|大小解压后:18.6 GB 含课程文件 学习C#和Unity编码和游戏开发 The Ultimat…

Linux命令行与命令

Linux命令行与命令 作者&#xff1a;Vamei 出处&#xff1a;http://www.cnblogs.com/vamei 欢迎转载&#xff0c;也请保留这段声明。谢谢&#xff01; Linux的命令是很重要的工具&#xff0c;也往往是初学者最大的瓶颈。有朋友用了很长时间的Linux图形界面&#xff0c;基本不使…

Java学习总结:58(Collections工具类)

Collections工具类 Java提供了一个集合的工具类——Collections&#xff0c;这个工具类可以实现List、Set、Map集合的操作。Collections类的常用方法如下&#xff1a; No.方法类型描述1public static < T > boolean addAll(Collection<? super T> c,T…elements…

2022-2028年中国醋酸行业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国醋酸行业市场行业相关概述、中国醋酸行业市场行业运行环境、分析了中国醋酸行业市场行业的…

[转] linux系统文件流、文件描述符与进程间关系详解

http://blog.sina.com.cn/s/blog_67b74aea01018ycx.html linux&#xff08;unix&#xff09;进程与文件的关系错综复杂&#xff0c;本教程试图详细的阐述这个问题。包括&#xff1a;1、linux多/单进程与多/单文件对于文件流和描述符在使用时的关联情况及一些需要注意的问题。2、…

VMware虚拟机 取消 简易安装

我的VMware更新到12.0版本了&#xff0c;突然有了个简易安装操作系统&#xff0c;不得不承认这个功能很省事&#xff0c;如果没有特殊要求&#xff0c;这样安装虚拟机既快速有稳定。 但是专业人士总是要专门的服务&#xff0c;追求自动化&#xff0c;往往忽略一些细节上的东西。…

UE5蓝图初学课程 Unreal Engine 5: Blueprints for Beginners

时长:6h 51m |视频:. MP4 1280720&#xff0c;30 fps(r) |音频:AAC&#xff0c;44100 Hz&#xff0c;2ch |大小解压后:4.4 GB 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; 没有编码的游戏开发 开发一个高质量的游戏&#xff0c;不需要写…

SQL基础学习总结:1(数据库)

数据库 我们通常将可以将大量数据保存下来&#xff0c;通过计算机加工而成的可以进行高效访问的数据集合称为数据库&#xff0c;简称&#xff1a;DB。 而用来管理数据库的计算机系统则称之为数据库管理系统&#xff0c;简称&#xff1a;DBMS。一般情况下&#xff0c;系统的使用…

MyEclipse安装Freemarker插件

以下是安装Freemarker插件并设置MyEclipse使用该插件的步骤&#xff1a;1、下载Freemarker插件 打开http://sourceforge.net/projects/freemarker-ide/files/ 2、解压&#xff0c;将hudson.freemarker_ide_0.9.14文件夹放入eclipse下的plugins文件夹。 发现hudson.freemarker_…

单例模式为什么使用volatile,以及双重检查&单例模式的一些思考

也就是第一个if(singleton==null),这个是为了代码提高代码执行效率,由于单例模式只要一次创建实例即可,所以当创建了一个实例之后,再次调用getInstance方法就不必要进入同步代码块,不用竞争锁。直接返回前面创建的实例即可。

2022-2028年中国IT外包市场投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国IT外包行业市场行业相关概述、中国IT外包行业市场行业运行环境、分析了中国IT外包行业市场…

iOS,Android,WP, .NET通用AES加密算法

这两天为移动App开发API&#xff0c;结果实现加密验证时碰到一大坑。这里不得不吐槽下又臭又硬的iOS&#xff0c;Windows Server无法解密出正确的结果&#xff0c;Android则可以&#xff0c;后来使用了通用的AES256加密算法才最终搞定。 搞服务器端小伙伴没有接触过iOS&#xf…

【Linux】Linux下的硬链接与符号链接

Linux的初学者常常混淆Linux中的硬链接&#xff08;hard link&#xff09;与符号链接&#xff08;symbol link&#xff09;的概念&#xff0c;分不清楚它们的区别。因此&#xff0c;本文将向读者全面介绍硬链接与符号链接&#xff0c;给予读者以全面的认识。 1.Linux下的文件系…

Unity + SQL数据库创建管理玩家排行榜学习教程

Unity SQL Databases Player Management Leaderboards More! Unity SQL数据库玩家管理排行榜更多&#xff01; MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&…

SQL基础学习总结:2(表的创建、删除、更新和名称修改)

表的创建、删除、更新和名称修改 登录MySQL(mysql -u root -p语句) 步骤&#xff1a; 1.首先得先使用mysql -u root -p语句登录数据库&#xff1b; 2.在"Enter password:"后面输入你设置的密码&#xff0c;然后就登录到MySQL可以进行数据库得操作了。 如下图&#…

需要抛出异常的情况

1、调用一个抛出已检查异常的方法。例如FileInputStream构造器。 2、程序运行中发现错误&#xff0c;并且利用throw语句抛出一个已检查异常。 3、程序出现错误。例如a[-1]0会抛出一个ArrayIndexOutOfBoundsException异常。 4、Java虚拟机和运行时库出现的内部错误。 对于可能会…

2022-2028年中国HDPE膜行业市场研究及投资发展分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国HDPE膜行业市场行业相关概述、中国HDPE膜行业市场行业运行环境、分析了中国HDPE膜行业市场…

linux+postfix+extmail+dovecot搭建邮件服务器

一、我们可以重新搭建服务器&#xff0c;也可以利用我前面的搭建方法编译安装&#xff0c;地址&#xff1a;http://wangzan18.blog.51cto.com/8021085/1605480&#xff0c;本次我们使用yum的方法来安装httpd和mysql&#xff0c;我的搭建环境还是我们的CentOS6.6 x86-64位mini版…

2009年3月

1、http://www.west-wind.com/Weblog/posts/509108.aspx Client Templating with jQuery http://jtemplates.tpython.com/ jTemplates is a template engine for JavaScript. 2、http://www.cnblogs.com/QLeelulu/archive/2008/11/27/1342722.html jQuery的模板与数据绑定插件…

UE4创建第一人称射击游戏学习教程

Unreal Engine 4: Create Your Own First-Person Shooter MP4 |视频:h264&#xff0c;1280720 |音频:AAC&#xff0c;44.1 KHz&#xff0c;2 Ch 语言&#xff1a;英语中英文字幕&#xff08;根据原英文字幕机译更准确&#xff09; |时长:38节课(9h 56m) |大小解压后:6.8 GB 学…

SQL基础学习总结:3(select语句基础算术运算符比较运算符)

select语句基础 列的查询 从表中选取数据时需要使用select语句&#xff0c;通过select语句查询并选取出必要数据的过程称为匹配查询或查询。 语法结构如下&#xff1a; select <列名1>,<列名2>,<列名3>... from <表名>;该select语句包含了select和f…

Linux——Linux概念架构的理解

摘要 Linux kernel成功的两个原因&#xff1a;&#xff08;1&#xff09;灵活的架构设计使得大量的志愿开发者能够很容易加入到开发过程中&#xff1b;&#xff08;2&#xff09;每个子系统&#xff08;尤其是那些需要改进的&#xff09;都具备良好的可扩展性。正是这两个原因使…

2022-2028年中国GPS导航行业投资分析及前景预测报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国GPS导航行业市场行业相关概述、中国GPS导航行业市场行业运行环境、分析了中国GPS导航行业市…