Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   XML. Зациклилась функция(( (http://www.flasher.ru/forum/showthread.php?t=109572)

Манюня 17.03.2008 04:49

XML. Зациклилась функция((
 
Есть документ XML:
Код:

<?xml version="1.0" encoding="UTF-8"?>
<event>
    <camera_name>Window 1</camera_name>
    <file>
          <file_url>//201.6.107.107/share/1/1/4/001D6A208BFB</file_url>
          <date>2008-03-14</date>
          <time>18:03:20</time>
          <order>1</order>
    </file>
</event>

Вот по-пыталась создать функцию(которые еще плохо умею писать), она зацикливается.
Код:

readXML = function(node_1 : XMLNode){
                                        var nodeURL : XMLNode = node_1.firstChild;
                                        var fileURL : String;
                                        fileURL = nodeURL.firstChild.toString();        // получила url адрес изобржния       
                                          trace(fileURL);
                                        var nodeDate : XMLNode = node_1.childNodes[1];               
                                        var date : String;
                                        date = nodeDate.firstChild.toString(); // получила дату
                                        trace(date);
                                        var nodeTime : XMLNode = node_1.childNodes[2];
                                        var time : String;
                                        time = nodeTime.firstChild.toString(); // получила время
                                        trace(time);
                                        var nodeOrder : XMLNode = node_1.childNodes[3];
                                        var order : String;
                                        order = nodeOrder.firstChild.toString(); // получила порядковый номер
                                        trace(order);
};
var my_xml:XML = new XML ()
my_xml.ignoreWhite = true;
my_xml.onLoad = function (success) {
        if (success) {
                trace (my_xml);
                trace(my_xml.hasChildNodes());
                trace(my_xml.firstChild.firstChild.nodeType);
                trace(my_xml.firstChild.childNodes[0]);
                var node : XMLNode = my_xml.firstChild.childNodes[0];
                trace(node.firstChild);               
                        var _node : XMLNode = my_xml.firstChild.childNodes[1];
                        if(_node.nodeName == 'file'){                               
                                if(_node.hasChildNodes()){ //если элемент <file>имеет дочерние узлы, то читаем их
                                        readXML(_node);                                       
                                }                       
                        }
        } else {
                trace ('Not working');
        }
};
my_xml.load ('new.xml');

Функция должна по задумке вернуть строки fileURL, date, time, order. Помогите пожалуйста переделать, чтобы работала:wacko:

iNils 17.03.2008 05:02

В чем выражается зацикливание?

Манюня 17.03.2008 05:11

Компилю (или как это называется в AS2 ?), и мне бесконечно выдаются результаты работы кода в output, пока не закрою окно проигрывателя.

udaaff 17.03.2008 05:57

Сколько раз проигрывается кадр, в котором написан этот код? )

copyPaste 17.03.2008 08:33

Ну вообщето, для этого документа - 1 раз. Но если загрузить другой xml документ, который будет содержать 2 и и более дочерних узлов <file>, то полюбому функцию написать нужно. Я уже переделала. конечно, но всеравно пока еще кака*ка, а ен программа получается))
Код:

readXML = function(node_1 : XMLNode): String{                                       
                                        fileURL = node_1.childNodes[0].toString();
                                        date = node_1.childNodes[1].toString;                                       
                                        time = node_1.childNodes[2].toString;
                                        order = node_1.childNodes[3].toString;
                                        return fileURL, date, time, order;
}
var my_xml:XML = new XML ();
my_xml.ignoreWhite = true;
my_xml.onLoad = function (success) {
        if (success) {
                var v : XMLNode = my_xml.firstChild;//самый важный дочерний узел               
                if(v.childNodes[1].nextSibling){//выполнить функцию readXML если существует братский узел file               
                        var p : XMLNode = v.lastChild;//последний дочерний узел
                        index = p.lastChild.firstChild;
                        trace(index);
                        }//нашла последний индекс - количество файлов}
                if(v.childNodes[1].nodeName == 'file'){                               
                        if(v.childNodes[1].hasChildNodes()){ //если элемент <file>имеет дочерние узлы, то читаем их
                                var fileNode : XMLNode = v.childNodes[1];
                                trace(fileNode);
                                readXML(fileNode.firstChild);                                               
                        }
                }
        } else {
                trace ('Not working');
        }
}
my_xml.load ('new.xml');


WindWalker 17.03.2008 09:05

Вложений: 1
Я бы сделал вот так:
Код:

function parseXML(x:XML) {
       
        var nodeEvent:DOM = new DOM(x.firstChild);
        var cameraName:String = DOM.asString(nodeEvent.camera_name);
       
        var nodeFiles:DOM = nodeEvent.file;
       
        for (var i=0; i<nodeFiles.length; i++) {
                var nodeFile = nodeFiles[i];
                var fileURL:String = DOM.asString(nodeFile.file_url, "");
                var date:String = DOM.asString(nodeFile.date, "");
                var time:String = DOM.asString(nodeFile.time, "");
                var order:Number = DOM.asNumber(nodeFile.order, 1);               
               
                trace ("fileURL: "+fileURL);
                trace ("date: "+date);
                trace ("time: "+time);
                trace ("order: "+order);
        }       
};

var my_xml:XML = new XML();
my_xml.ignoreWhite = true;
my_xml.onLoad = function(success) {
        if (success) {
                _root.parseXML(this);
        } else {
                trace('File not found');
        }
};
my_xml.load('new.xml');

Вот необходимый класс DOM (распакуй в папку с .fla файлом).

Манюня 17.03.2008 09:32

интересненько. Спасибо. У меня так в конце концов вышло
Код:

readOrder = function(node_1:XMLNode):String{                       
                order = node_1.childNodes[3].firstChild.toString();
                return order;
}
createNewTime = function(node_1:XMLNode):String{
                time = node_1.childNodes[2].firstChild.toString();
                arr = time.split(":");
                newTime = arr[0] + arr[1] + arr[2];
                return newTime;       
        }
createNewDate = function(node_1:XMLNode):String{
                date = node_1.childNodes[1].firstChild.toString();
                ar = date.split("-");
                newDate = ar[0] + ar[1] + ar[2];
                return newDate;
        }
createNewUrl = function(node_1:XMLNode):String{
                fileURL = node_1.childNodes[0].firstChild.toString();
                newUrl = slise(fileURL[2], some_url.length);
                return newUrl;
        }
       

var my_xml:XML = new XML ();
my_xml.ignoreWhite = true;
my_xml.onLoad = function (success) {
        if (success) {
                var v : XMLNode = my_xml.firstChild;//самый важный дочерний узел               
                if(v.childNodes[1].nextSibling){//выполнить функцию readXML если существует братский узел file               
                        var p : XMLNode = v.lastChild;//последний дочерний узел
                        index = p.lastChild.firstChild;
                        trace(index);
                        }//нашла последний индекс - количество файлов}
                if(v.childNodes[1].nodeName == 'file'){                               
                        if(v.childNodes[1].hasChildNodes()){ //если элемент <file>имеет дочерние узлы, то читаем их
                                var fileNode : XMLNode = v.childNodes[1];
                                trace(fileNode);
                                                                               
                        }
                }
        } else {
                trace ('Not working');
        }
}
my_xml.load ('new.xml');



Часовой пояс GMT +4, время: 23:54.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.