快速业务通道

flash action 由浅入深之二

作者 佚名技术 来源 服务器技术 浏览 发布时间 2012-07-10
查阅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
&106avascript
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[1],这里将其指名为quizNode,以便运用
var quizNode = quizDoc.childNodes[1];
// for each question node that is a child of the QUIZ node...
// 下面的循环将逐个提取QUIZ节点的子节点,即每条题目
for(var k = 0; k < quizNode.childNodes.length; k++) {
// make an array of the text nodes from each CHOICE node
// 为每条题目建立一个选项数组
var choicesArray = new Array();
// 下面的循环则是将题目的子节点,即各选项的nodevalue输入到choicesArray数组中
for(var j = 0; j < quizNode.childNodes[k].childNodes.length; j++) {
choicesArray[j] = quizNode.childNodes[k].childNodes[j].firstChild.nodevalue;
} [1]?[2]?下一页??
// construct a question object for each QUESTION node,
// and store it in questionsArray
// 用题目正文、选项数组、正确答案(正确答案目前还是字符串,所以用Number函数将之转为数字)作为参数,建立Question对象(定义Question对象的代码已经在上个例子中解释了)
// 将新建的Question对象作为questionsArray数组的一个元素
questionsArray[k] = new Question (
Number(quizNode.childNodes[k].attributes.answer),
quizNode.childNodes[k].attributes.text,
choicesArray);
} // done loading and processing the quiz questions
loadMsg = ""; // begin the quiz
// 调用函数makeQuestion,之后的进度就同上一个例子了
makeQuestion(currentQuestion);
}
// *** Strips whitespace nodes from an XML document. // *** by passing twice through each level in the tree
// 下面函数用于除去无用的空白节点,参数是需要处理的XML的根元素(我们已经将其指名为XMLnode了)
function stripWhitespaceDoublePass(XMLnode) {
// Loop through all the children of XMLnode
// 循环依次将根元素的子

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号