Просмотр полной версии : поиск в 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 файлов?
А слабо из обработчика myXML.onLoad после проверки на совпадение вызывать функцию? Для перебора всех значений массива заведи переменную, хранящую текущий индекс.
как ты ставишь вопрос ('найти вхождение определенного слова '), то так
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(.. , но до вызова..
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
Вот пример.
Обрабатывается, почему то, только последний файл. :(
я бы так сделал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)
}
}
посмотри в своем коде такие нюансы :
...
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]);
}
}
...
имхо из-за них (может быть и не только) непонятки
1. В его коде есть onLoad после load -- и он еще ждет стабильной работы.
2. Имя ноды, где надо искать, знаешь? Тогда могу дать свой класс, который обрабатывает все ноды с именем Х как укажешь.
2Antares
определять обработчик загрузки после вызова самой загрузки нелогично, конечно..
но, думаю тебе надо сочиниить устрашающий пример не рабочего кода,
иначе многие так и останутся в наивном убеждении, что это не принципиально (в пределах одного блока)
Сил, да мне собсна по барабану:)
Но эта практика с обработчиками может перенестись на звук и далее, и там уже все гораздо веселее.
2Antares
onLoad после load
спасибо - фигню спорол.
2ALL
А как(и куда) повесить запуск функции после того как все документы будут обработаны?
По index - не хотит. :)
сколько документов знаешь, после обработки каждого крутишь счетчик, если все, то вызываешь функцию..(где ее расположить не принципиально - где тебе удобнее)
зы: в моем примере (#8) так и сделано..
Juice_Green
19.01.2006, 08:30
хотел бы спросить еще вот что - почему файл не успевает подгрузится (XML), определение функции идет до ее вызова?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.