Форум 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=110920)

Shinoby 14.04.2008 11:30

Нашел таки вот такой код:
Код:

        _root.tree2xml = function (xmlNode) {
                trace (xmlNode);
               
                if (xmlNode.hasChildNodes () or xmlNode.childNodes.length != 0) {
                        var j = 0;
                        while (xmlNode.childNodes[j]) {
                                _root.tree2xml (xmlNode.childNodes[j++]);
                        }
                }
        };
       
       
        _root.tree2xml (xmlDoc_xml);

Кажися работает. Надо еще проверить точно ли весь ХМЛ обходит, но тем не менее похоже на правду, судя по объему выдаваемого трейсом инфы

Shinoby 14.04.2008 11:47

Нашел следующее:
Код:

        _root.tree2xml = function (xmlNode) {
                trace (xmlNode);
               
                if (xmlNode.hasChildNodes () or xmlNode.childNodes.length != 0) {
                        var j = 0;
                        while (xmlNode.childNodes[j]) {
                                _root.tree2xml (xmlNode.childNodes[j++]);
                        }
                }
        };
       
       
        _root.tree2xml (xmlDoc_xml);

На вскидку все работает. Нужно еще проверить все ли он пробегает. Но похоже что ДА.

iNils 14.04.2008 14:31

Учитывая, что это код мой, то он все обходит, только вместо or, сейчас надо использовать ||
:D

Shinoby 14.04.2008 15:05

Да мне OR понятнее, и к тому же я под 2AS пишу (или это из 1го?)

etc 14.04.2008 15:06

Цитата:

Сообщение от Shinoby
Да мне OR понятнее, и к тому же я под 2AS пишу (или это из 1го?)

Это вообще из версии 0.5. Оператор or устарел уже в 2000-ом году.

chingachgoog 14.04.2008 15:07

Цитата:

Сообщение от Shinoby
Код:

        for(my_node = book_xml3; my_node!=null; my_node = my_node.nextSibling){
                if(my_node.nodeName == "characterInfo"){
                        break;
                }

        trace(my_node.nodeName);
        }

Так тоже ничего. Трейс позвращает null. Я чего то не пойму, но не пойму чего именно. То что в my_node скидывается ХМЛ я уверен. Проверил засунув в цикл "my_node.childNodes[0].childNodes[0].childNodes[0].attributes.name" и он вернул мне правильное значение.

Проверять надо не так, а просто поставить трейс перед циклом:

Код:

trace("my_node="+my_node.nodeName);
        for(my_node = book_xml3; my_node!=null; my_node = my_node.nextSibling){
                if(my_node.nodeName == "characterInfo"){
                        break;
                }

        trace(my_node.nodeName);
        }

После чего станет понятно, почему произошла ошибка и что такое корневой узел.
А ваша проверка:
my_node.childNodes[0].childNodes[0].childNodes[0].attributes.name
ничего не дает, т.к. никоим образом не соответствует my_node.nodeName

Цитата:

Сообщение от udaaff
Ты часто видел xml с 256 уровнями вложенности?

Ни разу, т.к. я сам для себя xml и пишу. Но представить такое вполне могу - особенно при правильном нежелании пользоваться аттрибутами.

Цитата:

Сообщение от iNils
Учитывая, что это код мой, то он все обходит, только вместо or, сейчас надо использовать ||

Если я правильно понял, то or относилось к разработчику кода, мол "парни, выбирайте, что вам больше нравится: либо hasChildNodes либо childNodes.length". Или нет?

iNils 14.04.2008 15:19

Цитата:

Сообщение от chingachgoog
Если я правильно понял, то or относилось к разработчику кода, мол "парни, выбирайте, что вам больше нравится: либо hasChildNodes либо childNodes.length". Или нет?

Или нет, этот код я писал 3 года назад и уже не помню почему так сделал. :)

chingachgoog 14.04.2008 15:40

Просто я думаю, что hasChildNodes и childNodes.length!=0 взаимозаменяемы и ни к чему использовать их оба. А тут такой код. Может какая-то тонкость есть?

iNils 14.04.2008 15:46

Да нет, достаточно использовать один из них.


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

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