![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
|
Есть 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) {
грузим данные в массив и проверяем совпадение
}
}
}
__________________
Хватит клавиши топтать... :mad: Последний раз редактировалось as_68; 17.01.2006 в 15:06. |
|
|||||
|
в ссмысле 10 файлов?
|
|
|||||
|
Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
|
Отредактировал исходник
__________________
Хватит клавиши топтать... :mad: |
|
|||||
|
Регистрация: Nov 2003
Адрес: Север
Сообщений: 244
|
А слабо из обработчика myXML.onLoad после проверки на совпадение вызывать функцию? Для перебора всех значений массива заведи переменную, хранящую текущий индекс.
__________________
Scio me, nihil scire. |
|
|||||
|
как ты ставишь вопрос ('найти вхождение определенного слова '), то так
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(.. , но до вызова.. Последний раз редактировалось silin; 17.01.2006 в 15:46. |
|
|||||
|
Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
|
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])
}
}
}
};
похоже проскакивает раньше чем загружается 2 silin наверное не так поставил вопорос - найти в узлах xml
__________________
Хватит клавиши топтать... :mad: |
|
|||||
|
Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
|
Вот пример.
Обрабатывается, почему то, только последний файл. ![]()
__________________
Хватит клавиши топтать... :mad: |
|
|||||
|
я бы так сделал
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)
}
}
|
|
|||||
|
Регистрация: Apr 2002
Адрес: СПб
Сообщений: 288
|
спасибо, попробую.
__________________
Хватит клавиши топтать... :mad: |
|
|||||
|
посмотри в своем коде такие нюансы :
имхо из-за них (может быть и не только) непонятки |
![]() |
![]() |
Часовой пояс GMT +4, время: 09:39. |
|
|
« Предыдущая тема | Следующая тема » |
|
|