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

as_68 17.01.2006 14:55

поиск в XML
 
Есть 10 xml-ей.
Необходимо в цикле найти вхождение определенного слова во всех xml.
Подскажите, пожалуйста, как это организовать?

ЗЫ. такой код не успевает подгрузить значения из xml во flash

Код:

stop();
_root.region = new Array("1.xml", "2.xml", "3.xml", ..., "10.xml");
for (var index in _root.region) {
        prepareXML(_root.region[index]);
}
prepareXML = function (file) {
        myXML = new XML();
        myXML.ignoreWhite = true;
        myXML.load(file);
        myXML.onLoad = function(success) {
                if (success == true) {
                                грузим данные в массив и проверяем совпадение
                          }
            }
}


Juice_Green 17.01.2006 15:00

в ссмысле 10 файлов?

as_68 17.01.2006 15:07

Отредактировал исходник

nyctota 17.01.2006 15:28

А слабо из обработчика myXML.onLoad после проверки на совпадение вызывать функцию? Для перебора всех значений массива заведи переменную, хранящую текущий индекс.

silin 17.01.2006 15:39

как ты ставишь вопрос ('найти вхождение определенного слова '), то так
Код:

prepareXML = function (file) {
        myXML = new XML();
        myXML.ignoreWhite = true;
        myXML.load(file);
        var f=file;
        myXML.onLoad = function(success) {
                if (success == true) {
                        var n=this.toString().indexOf('target')
                        if(n!=-1) trace('слово "target" в позиции #'+ n +' в '+f)
                }
        };
};
_root.region = new Array("1.xml", "2.xml", "3.xml");
for (var index in _root.region) {
        prepareXML(_root.region[index]);
}

зы: сейчас только твой ЗЫ заметил
>>такой код не успевает подгрузить значения из xml во flash
не в том дело, что не успевает подгрузить, а в вызове функции до ее определения:
либо определяй ее как funtion prepareXML(..
либо prepareXML=function(.. , но до вызова..

as_68 17.01.2006 16:17

2 nyctota
Я так и делаю
в hot - искомое слово
words- массив получаемый из каждого xml-я.
poisk_ar- массив результатов поиска
_root.poisk_ar = new Array();
_root.poisk_ar.push("0");

Код:

myXML.onLoad = function(success) {
  if (success == true) {
        all = myXML.firstChild;
        for (i=0; i<all.childNodes.length; i++) {
      _root.words[i+1] = all.childNodes[i].childNodes[0].nodeValue;
        }
        for (i=0; i<_root.words.length; i++) {
                if (_root.words[i+1] == _root.hot) {
                        var pushed:Number = _root.poisk_ar.push([i+1]);
                }
        }
        if (pushed == undefined) {
                trace("не найдено");
        } else {
                for (i=0; i<_root.poisk_ar.length; i++) {
                        trace(_root.poisk_ar[i+1])
                }
        }
  }
};

но в результате - undefined
похоже проскакивает раньше чем загружается

2 silin
наверное не так поставил вопорос - найти в узлах xml

as_68 17.01.2006 17:16

Вложений: 1
Вот пример.
Обрабатывается, почему то, только последний файл. :(

silin 17.01.2006 17:20

я бы так сделал
Код:

var region = new Array("1.xml", "2.xml", "3.xml");
var poisk_ar = [];
var toLoad = region.length;//сколько загрузок
var hot = 'second'
for (var index in region)        prepareXML(region[index]);
function prepareXML(file) {
        var myXML = new XML();
        myXML.ignoreWhite = true;
        myXML.load(file);
        var f = file;
        myXML.onLoad = function(success) {
                if (success == true) {
                        var all = myXML.firstChild;
                        for (i=0 ; i<all.childNodes.length; i++) {
                                var word = all.childNodes[i].childNodes[0].nodeValue.split('\r').join('').split('\n').join('').split(' ').join('');
                                if (word == hot) poisk_ar.push({file:f, node:i});
                        }
                        if (!(--toLoad)) onLoadAll();//когда загрузятся все
                }
        };
}
function onLoadAll() {
        for (var i in poisk_ar) {
                trace('file:'+poisk_ar[i].file+' ; node:'+poisk_ar[i].node)
        }
}


as_68 17.01.2006 18:52

спасибо, попробую.

silin 17.01.2006 19:42

посмотри в своем коде такие нюансы :
Код:

...
if (success == true) {
                        var all = myXML.firstChild;
                        for (i=0; i<all.childNodes.length; i++) {
                                _root.words[i+1] = all.childNodes[i].childNodes[0].nodeValue;
                        }
                        for (i=0,pushed=0; i<_root.words.length; i++) {
                                if (_root.words[i+1] == _root.hot) {
                                        pushed+= _root.poisk_ar.push([i+1]);
                                }
                        }
...

имхо из-за них (может быть и не только) непонятки


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

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