FlashAS基础精典教程(10)

2008-04-02 11:06:09来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折


  从我们面向对象的角度来看,我们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.nbsp= new XML();

  这个对象是空的,我们通过appendChild, par***ML, 和 load 三种方法来输入数据

  当然我们也能够在定义的时候就输入数据:

  mydocument.nbsp= new XML('hello world!');

  这时候我们的mydocument.有了一个叫P的子节点,P的叶节点是hello world!

  之后我们就能够访问这个XML对象了,firstChild这个XML属性指向第一个子节点,childNodes是XML对象的子对象,指向任何的子节点

  mydocument.firstChild // Accesses P

  mydocument.childNodes� // 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字典吧.

  第十四章 最后一个版本选择题

  上一个版本面向对象的代码对我们这个基于XML的版本很有帮助,上一个版本我们是用对象的数组来存我们的数据,这个版本里面,我们使用外部的XML文档

  下面先看看XML文档的结构:

  version 1

  version 2

  version 3

  version 4

  version 5

  version 6

  version 3

  version 4

  version 5

  yes

  no

  mp3

  aiff

  wav

  true

  false

  java

  java

  c

  ecma-262

  perl

  这个XML里面,QUIZ是我们的根元素。每一题都放在QUESTION元素内,题目正文为其属性TEXT,正确答案为其属性ANSWER(ANSWER=1代表选第二个答案)。每一题的选项则是QUESTION的子节点CHOICE其实根本就不用解释,大家直接看都能看懂。使用了外部XML之后,我们升级题目只需改变XML文档即可,而上一个版本,修改外部AS文档之后还是需要EXPORT一次。这个版本里面,将保留上个版本大部分的代码,除了输入题目数据的部分,将用XML来代替。

  以下代码写到questionsArray.as中覆盖其原来内容

  首先仍然定义一个数组来存放数据

  var questionsArray = new Array();

  然后我们定义一个XML对象来存放XML数据

  var quizDoc = new XML();

  之后是建立将XML解释为我们存放题目的对象格式的函数buildQuestionsArray(),同时将他连接到新建的XML对象的onLoad函数,让XML下载完成之后执行这个函数quizDoc.onLoad = buildQuestionsArray然后是执行下载XML的AS

  quizDoc.load("quiz.xml");

  最后我们周详解说一下解释XML的函数

  // *** builds an array of question objects based on the dom tree in quizDoc

  function buildQuestionsArray () {

  // first, strip unwanted whitespace nodes from the tree.

  // 除去无用的节点,上一章已有介绍无用节点是如何出现的

  stripWhitespaceDoublePass(quizDoc);

  // now assign a convenient reference to the root QUIZ node

  // XML文档的根节点QUIZ节点就是 quizDoc.childNodes ,这里将其指名为quizNode,以便运用

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇: 使用钢笔工具绘制曲线路径

下一篇: 拖拽动作连同碰撞动作周详讲解