В AS3 зареждането на XML файл става много по-различно от AS2. Какви са точно разликите ще разгледаме в този урок на базата на директен пример. Ето го и скрипта:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
| stop();
//loading xml
var loader:URLLoader = new URLLoader();
loader.addEventListener(ProgressEvent.PROGRESS, loadingXML);
loader.addEventListener(Event.COMPLETE, onLoadXML);
loader.load(new URLRequest("getIngo.xml"));
///trace percent and bytes
function loadingXML(info:ProgressEvent):void {
trace("bytesLoaded: "+info.bytesLoaded+"\nbytesTotal: "+info.bytesTotal);
trace("percent: "+Number(info.bytesLoaded/(info.bytesTotal/100))+" %");
}
var endInfoArray:Array = new Array();
//[0]->path to picture, [1]-> go to url [2]->views [3]->uploaded by
//[4]->title [5]->duration [6]->rating
///get all info in endInfoArray
function onLoadXML(info:Event):void {
loader.removeEventListener(ProgressEvent.PROGRESS, loadingXML);
loader.removeEventListener(Event.COMPLETE, onLoadXML);
var XMLdata:XMLDocument = new XMLDocument();
XMLdata.ignoreWhite = true;
XMLdata.parseXML(String(loader.data));
var i:uint;
for (i=0; i<XMLdata.firstChild.childNodes.length; i++) {
endInfoArray.push(new Array(XMLdata.firstChild.childNodes[i].attributes["picUrl"],
XMLdata.firstChild.childNodes[i].attributes["togoURL"],
XMLdata.firstChild.childNodes[i].attributes["view"],
XMLdata.firstChild.childNodes[i].attributes["from"],
XMLdata.firstChild.childNodes[i].attributes["title"],
XMLdata.firstChild.childNodes[i].attributes["duration"],
XMLdata.firstChild.childNodes[i].attributes["starts"])
);
}
showArrayInfo(endInfoArray);
}
function showArrayInfo(array:Array):void {
var i:uint;
for (i=0;i<array.length;i++) {
trace("-----["+i+"]---------");
trace("url: "+array[i][0]);
trace("web: "+array[i][1]);
trace("view: "+array[i][2]);
trace("uploaded by: "+array[i][3]);
trace("title: "+array[i][4]);
trace("duration: "+array[i][5]);
trace("rating: "+array[i][6]);
}
} |
Сега идва и обяснението. В AS3 вече ползваме XMLDocument, вместо XML.
Тук използваме обекта loader, да зареди XML с url: "getIngo.xml", като му добавяме listeners, с помощта на които следим прогреса на зареждане и пълното зареждане на XML файла.
CODE1
2
3
4
| var loader:URLLoader = new URLLoader();
loader.load(new URLRequest("getIngo.xml"));
loader.addEventListener(ProgressEvent.PROGRESS, loadingXML);
loader.addEventListener(Event.COMPLETE, onLoadXML); |
В първите два реда премахваме listeners. Инициализираме си променлива XMLdata от тип XMLDocument. Новото тук е XMLdata.parseXML(String(loader.data)); с този ред добавяме към XMLdata xml съдържание. Иначе относно firstChild, childNodes и attributes, нямаме промени.
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| loader.removeEventListener(ProgressEvent.PROGRESS, loadingXML);
loader.removeEventListener(Event.COMPLETE, onLoadXML);
var XMLdata:XMLDocument = new XMLDocument();
XMLdata.ignoreWhite = true;
XMLdata.parseXML(String(loader.data));
var i:uint;
for (i=0; i<XMLdata.firstChild.childNodes.length; i++) {
endInfoArray.push(new Array(XMLdata.firstChild.childNodes[i].attributes["picUrl"],
XMLdata.firstChild.childNodes[i].attributes["togoURL"],
XMLdata.firstChild.childNodes[i].attributes["view"],
XMLdata.firstChild.childNodes[i].attributes["from"],
XMLdata.firstChild.childNodes[i].attributes["title"],
XMLdata.firstChild.childNodes[i].attributes["duration"],
XMLdata.firstChild.childNodes[i].attributes["starts"])
);
} |
Използвам функцията
showArrayInfo(), за да видим какви стойностти са се присвоили в масива.
Примерни файлове за даунлоуд:
ТУК