AS基础教程整理第12/13页

 更新时间:2007年03月22日 00:00:00   作者:  

XML,名字是不是很COOL啊,其实,FLASH里面用XML不难(其他地方的应用就……所以千万别说XML不难,是FLASH里面用不难),呵呵,好吧,开始吧。

十三章 XML

XML是一种标记语言,通常用于储存,组织和传输数据

XML文档主要由一系列的元素(elements)和属性(attributes)组成,看下面一个XML的例子:

<BOOK>
  <TITLE>ActionScript: The Definitive Guide</TITLE>
  <AUTHOR SALUTATION="Mr.">Colin Moock</AUTHOR>
  <PUBLISHER>O'Reilly</PUBLISHER>
</BOOK> 

这个例子就是由元素 BOOK, TITLE, AUTHOR, PUBLISHER 组成的

在元素<AUTHOR SALUTATION="Mr.">里就包含了一个属性:SALUTATION

这些元素怎么让浏览器解释是什么意思呢?它需要DTD,一套决定这些标记的意义的规则。(例如我们常听说的WML、SVG,它们都是XML,但对应不同的DTD)

XML与HTML想比要求格式更严格,格式要求:
* tags 一定要嵌套 (就是说有<book>就一定要有</book>)
* 一定要有一个根元素 (例如例子中的 BOOK)
* 开始部分要用XML声明标记 :<?xml version="1.0"?> 

但是AS里面的XML不需要DTD(这就是我说FLASH里面用XML不难的原因,哈哈)

从我们面向对象的角度来看,我们XML的内容可以当做为对象,下图就是我们建立XML对象的层次结构



FLASH已经内建有XML类让我们可以定义自己的XML对象,同时XML对象还有很多方法。

我们还是更进一步用例子分析吧,如果我们建立了如上图的XML对象,那么FLASH首先会自动建立一个元素DOCUMENT,下面才是我们自己的元素。

本来是第一个元素的BOOK成为了DOCUMENT的第一个节点(node),不过我们把它继续当我们XML数据的根也无妨

当一个节点包含于另一个节点时,这个节点称为另一节点的子节点(child),反之另一节点称为其的父节点(parent)

例子中BOOK就是DOCUMENT的child,DOCUMENT就是BOOK的parent

再看图,BOOK有7个子节点,是不是和你想象不同?多了四个节点#text,因为FLASH把标记之间的空格和回车也读成一个节点了。

几个子节点的关系成为兄弟(siblings),如果要找AUTHOR的下一个兄弟(next sibling),FLASH就会给你找来#text

这可不是我们想要的,解决的方法
* 直接在XML里面把空格回车都删除掉,就是说一个TAG紧挨着一个
* 用AS把无用的子节点删除
* 在FLASH读入XML源数据之前,将该XML对象的一个属性ignoreWhite设置为true,但是该属性只在R41版本的PLAYER生效(注:网上可以更新的版本为R41,但是随FLASH附带的FLASHPLAYER的版本是R30)

再回到我们的例图,三个子节点下面还有子节点,最尾的节点也可以叫叶节点。

但是图里面还有个东西我们没找到,就是AUTHOR的属性SALUTATION,属性不是该节点的子节点,要访问我们属性,要用XML.attributes

概念先说这么多,现在看看我们怎么把XML源程序输入进FLASH

首先定义一个新的XML对象了:
myDocument = new XML(); 
这个对象是空的,我们通过appendChild, par***ML, 和 load 三种方法来输入数据
当然我们也可以在定义的时候就输入数据:myDocument = new XML('<P>hello world!</P>'); 
这时候我们的myDocument就有了一个叫P的子节点,P的叶节点是hello world!
之后我们就可以访问这个XML对象了,firstChild这个XML属性指向第一个子节点,childNodes是XML对象的子对象,指向所有的子节点
myDocument.firstChild     // Accesses P
myDocument.childNodes[0]  // Also accesses P 两个AS语句指向的都是节点P
要访问叶节点的内容需要属性nodeValue
我们要显示P节点的子节点的内容,就要写成:trace(myDocument.firstChild.firstChild.nodeValue); 
要给它赋值:
myDocument.firstChild.firstChild.nodeValue = "goodbye cruel world"; 
要删除P节点,用方法removeNode:
myDocument.firstChild.removeNode(); 
新建一个节点叫P,用方法createElement创建元素:
newElement = myDocument.createElement("P"); 
再将该元素加进去作为一个节点,用方法appendChild:
myDocument.appendChild(newElement); 

做一个叶节点方法类似:
newText = myDocument.createTextNode("XML is fun"); 
myDocument.firstChild.appendChild(newText); 

更详尽的方法还是查阅AS字典吧

相关文章

最新评论