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

KiL33 25.12.2008 10:32

Поиск по XML
 
Реализовал следующее
Код AS1/AS2:

var myxml:XML = new XML();
myxml.ignoreWhite = true;
var myxml_p:XML = new XML();
myxml_p.ignoreWhite = true;
var myxml_t:XML = new XML();
myxml_t.ignoreWhite = true;
myxml.load('image/abc.xml');
 
poisk.input_txt.onChanged = function() {
        res = false;
        str = poisk.input_txt.text;
        if (str != '') {
                myxml_p.firstChild.removeNode();
                var node:XMLNode = myxml_p.createElement("node");
                myxml_p.appendChild(node);
                for (var i = 0; i<myxml_t.firstChild.childNodes.length; i++) {
                        if (myxml_t.firstChild.childNodes[i].hasChildNodes) {
                                for (var j = 0; j<myxml_t.firstChild.childNodes[i].childNodes.length; j++) {
                                        if (str.toLowerCase() == substring(myxml_t.firstChild.childNodes[i].childNodes[j].attributes.label, 0, str.length).toLowerCase()) {
                                                myxml_p.firstChild.appendChild(myxml_t.firstChild.childNodes[i].childNodes[j].cloneNode(false));
                                                res = true;
                                        }
                                }
                        }
                }
        } else {
                mytree.dataProvider = myxml_t.firstChild;
        }
        if (res) {
                mytree.dataProvider = myxml_p.firstChild;
        }
};
myxml.onLoad = function() {
        mytree.dataProvider = myxml.firstChild;
        myxml_t = myxml;
};
mytree.setStyle("fontSize",14);
mytree.setStyle("backgroundColor",0xAFC6CF);
mytree.setStyle("color",0x510066);
mytree.setStyle("fontFamily","Microsoft Sans Serif");
var treeListener:Object = new Object();
treeListener.change = function(evt_obj:Object) {
        var node = mytree.selectedItem;
mytree.setIsOpen(node, !mytree.getIsOpen(node), true);
if (node.attributes.url) {
                attachMovie("anons","anons",998);
                anons._x = 503;
                anons._y = 156;
 
                anons.mc.loadMovie(node.attributes.url);
 
}};
mytree.addEventListener("change", treeListener);

Это поиск по XML структуре.
С голым кодом, возможно, будет разобраться сложнее, поэтому исходник прилагаю.
Не получается следующее.
Необходимо что бы поиск реализовывался не только по названию предприятия/организации, но и по тем товарам, которые оно производит.
Понятно, что структура XML должна содержать в себе, что-то вроде меток для каждой организации тапа этого:
Код:

<node label="организация1" meta="продажа ёлок, новогодние шары, хлопушки" url=""/>
Но по меткам не получается гулять ибо как распознать что после запятой идет другое значение.
Может это можно как-то иначе реализовать?
Или придется делать что-то типа того?
Код:

<node label="организация1" meta1="продажа ёлок" meta2="новогодние шары" meta3="хлопушки" url=""/>

scarbo 25.12.2008 11:14

а если indexOf() искать,он вроде должен и через запятую найти

user123 25.12.2008 11:27

дык а что тебе мешает раздербанить строку?

KiL33 25.12.2008 11:50

Цитата:

Сообщение от scarbo (Сообщение 786265)
а если indexOf() искать,он вроде должен и через запятую найти

На примере можешь показать?
Цитата:

Сообщение от user123 (Сообщение 786268)
дык а что тебе мешает раздербанить строку?

Что значит раздербанить?!)))

user123 25.12.2008 11:56

Цитата:

Сообщение от KiL33 (Сообщение 786275)
Что значит раздербанить?!)))

some_str.split(",");

KiL33 25.12.2008 13:54

Что-то не понял я, как применить split(","). Отдельно цикл писать.

dimarik 25.12.2008 18:11

Выкидываем запятые!
some_str.split(",").join(" ");

Mnilionic 25.12.2008 19:11

Заменяем условие и цыкл.
в поиск вписываеи "шары" или "Хлопушки" :)
Код AS1/AS2:

        ...
        if (str != '' && str.length > 3) {
                myxml_p.firstChild.removeNode();
                var node:XMLNode = myxml_p.createElement("node");
                myxml_p.appendChild(node);
 
                var node_t = myxml_t.firstChild.firstChild;
                while( node_t ){
 
                        if( node_t.hasChildNodes ){
                                var sub_node_t = node_t.firstChild;
                                while( sub_node_t ){
 
                                        if ( sub_node_t.attributes.meta != undefined && sub_node_t.attributes.meta.toLowerCase().indexOf(  str.toLowerCase()  ) != -1 ){
                                                myxml_p.firstChild.appendChild( sub_node_t.cloneNode(false) );
                                                res = true;
                                        }
 
                                        sub_node_t = sub_node_t.nextSibling;
                                }
                        }
 
                        node_t = node_t.nextSibling;
                }
                ...

а вообще лучше сделать аттрибут keywords и вбивать туда слова в иминительном падеже через запятую.

KiL33 25.12.2008 21:07

Mnilionic, благодарю!
Это настоящий новогодний подарок!:victory:


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

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