Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   XML 2 Object (http://www.flasher.ru/forum/showthread.php?t=61856)

Nox Noctis 13.08.2004 20:10

только из любви к искусству :)
(смысла в этом всём я по-прежнему не наблюдаю...)

старался сделать близко к тому что пытался сделать ты.
Код:

//
// парсер
// выполняет обход вширину по сути, делает объекты из нод.
//
XML.prototype.parse2Object = function() {
        var obj = {};
                // свойства ноды
        obj._value = this.nodeValue;
        obj._name = this.nodeName;
        obj._attributes = {};
                //
        for (var i in this.attributes) {
                obj._attributes[i] = this.attributes[i];
        }
                //
                // перебор дочерних нод
                //
        for (var i = 0; i<this.childNodes.length; i++) {
                if (this.childNodes[i].nodeType == 1) {
                        if (!obj[this.childNodes[i].nodeName].length) {
                                obj[this.childNodes[i].nodeName] = [];
                        }
                        obj[this.childNodes[i].nodeName].push(this.childNodes[i].parse2Object());
                }
        }
        return obj;
};
XMLNode.prototype.parse2Object = XML.prototype.parse2Object;
//
// загрузчик ХМЛа отдельно от парсера
// создаёт объект xmlObject в текущей области видимости
//
xmlSrc = new XML();
xmlSrc.ignoreWhite = true;
xmlSrc.onLoad = function(flag) {
        if (flag) {
                xmlObject = this.firstChild.parse2Object();
        } else {
                trace("what the hell is going on?");
        }
};
xmlSrc.load("portfolio.xml");


Nox Noctis 13.08.2004 20:12

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

KidsKilla 13.08.2004 20:57

шпасиба Nox =)
 
ващето я хочу текстовую ноду запихнуть в св-во _value родительского тега...
во это чето не догоняю ща как замутить...

KidsKilla 13.08.2004 21:13

вот еще что...
trace(xmlObject) - говорит undefined типа парсер не записал в xmlObject ничего...

Nox Noctis 13.08.2004 21:32

а когда ты трейсишь? :)
сдаётся мне ты трейсишь это дело тогда, когда ХМЛ даже еще не загрузился, не то что не отпарсился... потому и андефайнед.

Nox Noctis 13.08.2004 21:36

исправленный вариант:
Код:

//
// парсер
// выполняет обход вширину по сути, делает объекты из нод.
//
XML.prototype.parse2Object = function() {
        var obj = {};
        // свойства ноды
        if (this.nodeValue.length) {
                obj._value = this.nodeValue.length;
        } else {
                obj._value = "";
        }
        obj._name = this.nodeName;
        obj._attributes = {};
        //
        for (var i in this.attributes) {
                obj._attributes[i] = this.attributes[i];
        }
        //
        // перебор дочерних нод
        //
        for (var i = 0; i<this.childNodes.length; i++) {
                if (this.childNodes[i].nodeType == 1) {
                        if (!obj[this.childNodes[i].nodeName].length) {
                                obj[this.childNodes[i].nodeName] = [];
                        }
                        obj[this.childNodes[i].nodeName].push(this.childNodes[i].parse2Object());
                } else if (this.childNodes[i].nodeType == 3) {
                        obj._value += this.childNodes[i].nodeValue;
                }
        }
        return obj;
};
XMLNode.prototype.parse2Object = XML.prototype.parse2Object;
//
// загрузчик ХМЛа отдельно от парсера
// создаёт объект xmlObject в текущей области видимости
//
xmlSrc = new XML();
xmlSrc.ignoreWhite = true;
xmlSrc.onLoad = function(flag) {
        if (flag) {
                xmlObject = this.firstChild.parse2Object();
        } else {
                trace("what the hell is going on?");
        }
};
xmlSrc.load("portfolio.xml");

всё нехитро как видишь :)

KidsKilla 15.08.2004 18:14

Отдельное спасибо Nox)
 
ищез на снос винды)

а штука эта всё же полезна если интересно могу объяснить чем))

KidsKilla 15.08.2004 22:00

кстати, Nox, я подобным синтаксисом не пользовался.
как передать в функцию parse2Oobject переменную?

Antares 16.08.2004 00:21

Re: Отдельное спасибо Nox)
 
Цитата:

Оригинал написал(а) KidsKilla
а штука эта всё же полезна если интересно могу объяснить чем))
Ну и? :)

KidsKilla 16.08.2004 02:32

с переменными разобрался. там другой затык)))

по поводу пользы:
эту штуку можно использовать в качестве оотправной точки для создания парсера хтмл(<sup> к примеру) это, правда, более глобальная штука)

лично мне это нужно по 2м причинам - 1)весь текст собирается в 1м св-ве 2)гораздо проще узнать сколько определенных тегов в данной ноде. да и вообще на мой взгляд проще использовать obj.item[1].tag[5] чем выискивать стандартными способами. логичнее...


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

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