Форум 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)
-   -   Parse XML с неограниченной вложенностью (http://www.flasher.ru/forum/showthread.php?t=104299)

Ведьмак 22.11.2007 16:58

Parse XML с неограниченной вложенностью
 
Всем, доброго дня!

Есть XML типа
Код:

<parent>
  <text></text>
</parent>
<parent>
  <text></text>
  <sub>
      <text></text>
  </sub>
</parent>
<parent>
  <text></text>
  <sub>
      <text></text>
      <sub>
        <text></text>
      </sub>
  </sub>
</parent> ...

этих SUB в SUB может быт неогранниченное колличество.. Этакое древо..

Родскажите как это лучше распарсить в Flash? Что-то я совсем запутался в массивах, блин...

Fernando Costa 22.11.2007 17:28

ну если неограниченное дерево то рекурсией обходи

Ведьмак 22.11.2007 17:36

я думал, что от этого тут не убежать, да и при обработке конечного массива тоже нужно будет его раскручивать рекурсивно..

можно с этого момента по-подробнее или пример? )

Fernando Costa 22.11.2007 17:50

вот тут подобное обсуждалось: http://flasher.ru/forum/showthread.php?t=88954

Ведьмак 22.11.2007 18:33

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

вопрос еще актуален)

wvxvw 22.11.2007 18:39

ХМЛ парсится уже прямо при создании. Зачем его еще куда-то во что-то парсить?

telit 22.11.2007 18:40

Код:

XML.prototype.makeObj = function(xObj, obj) {
        //----- Initialise objects
        if (xObj == null) {
                xObj = this;
        }
        if (obj == null) {
                obj = {};
        }
        var a, c, nName, nType, nValue, cCount;
        //----- Add attributes to the object
        for (a in xObj.attributes) {
                obj[a] = xObj.attributes[a]
        }
        //----- Build child nodes
        for (c in xObj.childNodes) {
                nName = xObj.childNodes[c].nodeName;
                nType = xObj.childNodes[c].nodeType;
                nValue = xObj.childNodes[c].nodeValue;
                if (nType == 3) {
                        obj._value = nValue;
                        obj._type = 'text';
                }
                if (nType == 1 && nName != null) {
                        if (obj[nName] == null) {
                                obj[nName] = this.makeObj(xObj.childNodes[c], {});
                        } else if (obj[nName]._type != 'array') {
                                obj[nName] = [obj[nName]];
                                obj[nName]._type = 'array';
                        }
                        if (obj[nName]._type == 'array') {
                                obj[nName].unshift(this.makeObj(xObj.childNodes[c], {}));
                        }
                }
        }
        // Return object
        return obj;
};


Ведьмак 22.11.2007 18:44

2 wvxvw: XML внешний..
2 telit: спасибо конечно... ты хочешь, чтобы у меня моск взорвался? или пару комментов уже рука не поднялась писать? хоть что передается в функцию ( xObj, obj)?

wvxvw 22.11.2007 18:48

Во флеше все ХМЛи одинаковые %) они не бывают внешними или внутренними =)
Это значит, что если вы дождались ХML.onLoad - вы его уже 1 раз отпарсили. Лучше, чем сам Флеш вы это вряд ли сделаете, ну уж не быстрее, это точно =)

Ведьмак 22.11.2007 18:53

2 wvxvw: понял идею)) мне нужно обойти весь XML и перегнать инфорамцию во что-то с чем дальше можно удобны работать (массив и .т.д.)

2 telit: еще раз спасибо


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

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