注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

金融IT小鸿的博客

致力于金融IT行业

 
 
 

日志

 
 
关于我

Organize the world's information I care about and share it with other people! Change the Financial Industry through Information Technology! 爱互联网,爱金融, 爱分享,爱运动, 也爱偶尔胡思乱想! 我是金融IT小鸿

网易考拉推荐

【转】ActionScript中XML类的使用  

2010-10-28 12:52:57|  分类: AS & Flex |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

XML 是一种结构化的描述数据形式,因其简单,灵活,尤其是在数据交换和可移植等优点现

已成为事实上的工业标准。

 

ActionScript 3.0 新增了新的操作XML的语法,即ECMAScript for XML,也叫E4X,提供一种比

Document Object Model (DOM)更简单更容易访问XML的新方式。使用E4X,你会发现操作XML

比以前更简单了

 

ActionScript 3.0 包含一些用于处理 XML 结构化信息的类。下面列出了两个主类:
■ XML:表示单个 XML 元素,它可以是包含多个子元素的 XML 文档,也可以是文档中
的单值元素。
■ XMLList:表示一组 XML 元素。当具有多个“同级”(在 XML 文档分层结构中的相
同级别,并且包含在相同父级中)的 XML 元素时,将使用 XMLList 对象。例如,
XMLList 实例是使用以下一组 XML 元素(可能包含在 XML 文档中)的最简便方法:
<artist type="composer">Fred Wilson</artist>
<artist type="conductor">James Schmidt</artist>
<artist type="soloist">Susan Harriet Thurndon</artist>

 

技术名词:

 

XML document :

包含XML的文件,也指读取和发送XML的数据,XML文档的概念不要和XMLDocument类搞混。

 

XML包 :

一个XML包指从整个XML文档中取出的片断

XML 节点e :

XML最基本的块,节点可以是元素,文本节点,属性等等

XML 元素 :

这个术语和"Tag"意义类似,更确切地说,元素包含tags。元素必须有开始和结束标签

(<element></element>)或(<element />).

Root 节点 :

XML层级元素中最顶层的元素

Text 节点 :

包含文本的节点,一般都在元素里面

Attribute(属性):

元素的一部分,如<element name="value">,name="value"就是属性.

XML 声明 :

典型的申明如<?xml version="1.0" ?>.

XML 树 :

XML 数据的节点层级构成XML 树

 

可以通过{}创建动态xml

 

 

添加XML元素:

a:通过newElement属性来添加新的元素

 

Flex代码 
  1. var example:XML = <example />;  
  2. example.newElement = <newElement />;  
  3.   
  4. /* 显示:  
  5. <example>  
  6. <newElement/>  
  7. </example>  
  8. */  

 
b:用(.)运算符

 

Flex代码 
  1. var example:XML = <example />;  
  2. example.emptyElement = "";  
  3.   
  4. /* 显示:  
  5. <example>  
  6. <emptyElement/>  
  7. </example>  
  8. */  
 

c:用([ 和])

 

Flex代码 
  1. var example:XML = <example />;  
  2. var id:int = 10;  
  3. example[ "user" + id ] = "";  
  4.   
  5. /* 显示:  
  6. <example>  
  7. <user10/>  
  8. </example>  
  9. */  

 上述三种职能插入到尾部,可用insertChildBefore( )和insertChildAfter( ) 方法来控制插入的位置

 

Flex代码 
  1. var example:XML = <example/>;  
  2. example.two = "";  
  3. example = example.insertChildBefore( example.two, <one /> );  
  4. example = example.insertChildAfter( example.two, <three /> );  
  5.   
  6. /* 显示:  
  7. <example>  
  8. <one/>  
  9. <two/>  
  10. <three/>  
  11. </example>  
  12. */  

 

 

在XML元素中添加属性 : 使用E4X的@ 操作符

 

Flex代码 
  1. var example:XML = <example><someElement/></example>;  
  2. example.someElement.@number = 12.1;  
  3. example.someElement.@string = "example";  
  4. example.someElement.@boolean = true;  
  5. example.someElement.@array = ["a", null, 7, undefined, "c"];  
  6.   
  7. /* 显示:  
  8. <example>  
  9. <someElement number="12.1" string="example" boolean="true"  
  10. array="a,,7,,c"/>  
  11. </example>  
  12. */  

 但是有时如果属性名包含一些特殊符号,则不能用@操作符,必须加上[]操作符

 

example.someElement.@["bad-variable-name"] = "yes";

在[]里还可用表达式产生动态属性名,这是种很实用的技巧:

example.someElement.@["color" + num] = "red";

 

 

读取XML树中的元素 :

使用elements( ) 方法返回XMLList 类型的所有元素,并用for each 循环遍历

 

Flex代码 
  1. var menu:XML = <menu>  
  2. <menuitem label="File">  
  3. <menuitem label="New"/>  
  4. </menuitem>  
  5. <menuitem label="Help">  
  6. <menuitem label="About"/>  
  7. </menuitem>  
  8. This is a text node  
  9. </menu>;  
  10.   
  11. for each ( var element:XML in menu.elements( ) ) {  
  12. /* 显示:  
  13. File  
  14. Help  
  15. */  
  16. trace( element.@label );  
  17. }  

 elements( ) 方法只返回下一级的子元素节点,这里面不包括文本节点和下一级节点.要向访问整个XML结构,还需进行递归循环处理

 

Flex代码 
  1. var menu:XML = <menu>  
  2. <menuitem label="File">  
  3. <menuitem label="New"/>  
  4. </menuitem>  
  5. <menuitem label="Help">  
  6. <menuitem label="About"/>  
  7. </menuitem>  
  8. This is a text node  
  9. </menu>;  
  10.   
  11. /* 显示:  
  12. File  
  13. New  
  14. Help  
  15. About  
  16. */  
  17.   
  18. walk( menu );  
  19.   
  20.   
  21. function walk( node:XML ):void {  
  22. for each ( var element:XML in node.elements( ) ) {  
  23. trace( element.@label );  
  24. // Recursively walk the child element to reach its children  
  25. walk( element );  
  26. }  
  27. }  

 通过节点名字来查找元素 : 直接使用E4X 的. 加上属性名语法来查找元素

 

var fruit:XML = <fruit><name>Apple</name></fruit>;

trace( fruit.name );// 显示: Apple

var author:XML = <author><name><firstName>Darron</firstName></name></author>;

trace( author.name.firstName );// 显示: Darron

还有种简便的方法,即使用双点操作符(..)来跳过一级访问,如:

var author:XML = <author><name><firstName>Darron</firstName></name></author>;

trace( author..firstName );// 显示: Darron

当有多个元素节点具有相同名称时,可通过索引值访问,这有点像数组,使用中括号

 

Flex代码 
  1. var items:XML = <items>  
  2. <item>  
  3. <name>Apple</name>  
  4. <color>red</color>  
  5. </item>  
  6. <item>  
  7. <name>Orange</name>  
  8. <color>orange</color>  
  9. </item>  
  10. </items>;  
  11.   
  12. trace( items.item[0].name );// 显示: Apple  
  13. trace( items.item[1].name );// 显示: Orange  

 元素节点,但又不知道有多少个,可用for each 循环遍历

 

Flex代码 
  1. var items:XML = <items>  
  2. <item>  
  3. <name>Apple</name>  
  4. <color>red</color>  
  5. </item>  
  6. <item>  
  7. <name>Orange</name>  
  8. <color>orange</color>  
  9. </item>  
  10. </items>;  
  11.   
  12. // 使用双点操作符  
  13. for each ( var name:XML in items..name ) {  
  14. /* 显示:  
  15. Apple  
  16. Orange  
  17. */  
  18. trace( name );  
  19. }  

 也可用[]操作符来访问:

var nodeName:String = "color";

var fruit:XML = <fruit><color>red</color></fruit>;

trace( fruit[nodeName] );// Displays: red

需要注意的是[]操作符不能和双点操作符一起用

trace( fruit..[nodeName] ); // 导致编译错误

 

text( ) 方法可正确返回文本节点内容:

 

Flex代码 
  1. var fruit:XML = <fruit>  
  2. <name>Apple</name>  
  3. An apple a day...  
  4. </fruit>;  
  5.   
  6. for each ( var textNode:XML in fruit.text( ) ) {  
  7. trace( textNode );// 显示: An apple a day...  
  8. }  

 

读取元素的属性 :

使用attributes( ) 方法返回指定元素的属性列表,或者通过名称用E4X的@操作符或attribute( )

 

Flex代码 
  1. var fruit:XML = <fruit name="Apple" color="red" />;  
  2. var attributes:XMLList = fruit.attributes( );  
  3.   
  4. trace( attributes[0] );// 显示: Apple  
  5. trace( attributes[1] );// 显示: red  

 name( ) 方法可显示出属性名

 

Flex代码 
  1. var fruit:XML = <fruit name="Apple" color="red" />;  
  2. for each ( var attribute:XML in fruit.attributes( ) ) {  
  3. trace( attribute.name( ) + " = " + attribute.toString( ) );  
  4.   
  5. /* 显示:  
  6. name = Apple  
  7. color = red  
  8. */  
  9. }  

 如果属性名含有特殊字符,可用[]进行访问

 

使用delete 关键字删除元素,文本节点和属性 ;delete只能一次删除一个节点,如果要删除多个节点,可通过for循环进行删除


转自:http://xiejiangbo.javaeye.com/blog/456236

  评论这张
 
阅读(990)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017