Имя: Пароль:
1C
1C 7.7
v7: Исключить некоторые узлы из обработки иксемеля
,
0 Злопчинский
 
27.02.15
02:14
Доброноч, пиплы!
Гружу иксемель
Узлов много, всякоразное.
Мне многие узлы не нужны.

Сейчас фильтрую ПРОГРАММНО тупо по списку значений нужных узлов, типа

    СЗузлы = СоздатьОбъект("СписокЗначений");
    СЗузлы.ДобавитьЗначение("ДАННЫЕ");    
    СЗузлы.ДобавитьЗначение("ОТЧЕТ");
        СЗузлы.ДобавитьЗначение("ШАПКА");    
            СЗузлы.ДобавитьЗначение("НОМЕР");
            СЗузлы.ДобавитьЗначение("ДАТА");    
            СЗузлы.ДобавитьЗначение("КАССОВАЯСМЕНА");
            СЗузлы.ДобавитьЗначение("СУММАДОКУМЕНТА");    
            СЗузлы.ДобавитьЗначение("СУММАНДС");
            СЗузлы.ДобавитьЗначение("СУММАВОЗВРАТОВ");    
        СЗузлы.ДобавитьЗначение("ТОВАРЫ");    
            СЗузлы.ДобавитьЗначение("СТРОКА");
            СЗузлы.ДобавитьЗначение("ТОВАР");
        СЗузлы.ДобавитьЗначение("ВОЗВРАТЫ");    
        СЗузлы.ДобавитьЗначение("ОПЛАТАПЛАТЕЖНЫМИКАРТАМИ");
    
    //пока не обрабатываем, в отдельный документ
    //СЗузлы.ДобавитьЗначение("ВОЗВРАТ");

.. и тут ВНЕЗАПНО хотелка

типа какой нибудь схемы/чего-то еще - чтобы иксемель при чтении узлов сам пропускал ненужные

такое возможно или я хочу странного?
(жуть я как не люблю эти обмены)

Спсб.
1 lavalit
 
27.02.15
11:02
А у Ёкселя читалка на VBA нарисована?
2 Злопчинский
 
27.02.15
15:05
(1) ничего не понял...
3 Ёпрст
 
27.02.15
15:09
чем читаешь то хоть ?
4 Злопчинский
 
27.02.15
15:17
(3) XMLDOM
5 Злопчинский
 
27.02.15
15:28
(3) слушай, вот еще проблемка
6 Ёпрст
 
27.02.15
15:32
(4) там же есть перебор только конкретных нод по имени.. остальные будут сразу пропуск, автоматом.
7 Злопчинский
 
27.02.15
15:51
(6) ну..
1. я слабоват по эффективному иксемелю
2. заявленную проблему решил ракообразно наверное - просто при получении узла проверяю его наличие в списке необходимых для обработки - если нет - сразу возврат...
8 Злопчинский
 
27.02.15
15:54
вот такая у меня хрень примерно...
.

//**************************************************************************************
//
Функция ВыполнитьУзел(Узел, Уровень=0)
    
    Если СЗузлы.НайтиЗначение(Врег(Узел.tagName)) = 0 Тогда
        //<--- узел не обрабатывается согласно установленным ограничениям -->"
        Возврат 1;
    КонецЕсли;
    
    КолвоУзлов = Узел.childNodes.length-1;
    Для СчУзлов = 0 По КолвоУзлов
    Цикл
        ТекУзел = Узел.childNodes.item(СчУзлов);
        Если ТекУзел.nodeType <> 1 Тогда Продолжить; КонецЕсли;
        
        УзелИмя     = ВРЕГ(ТекУзел.tagName);
        УзелТекст     = СокрЛП(ТекУзел.text);
        
        Если УзелИмя = "НУЖНЫЙУЗЕЛ01"
        Тогда //отчет ккм
            ЗнакДокумента = 1;
            //всякое нужное по узлу          
        КонецЕсли;

        Результат = ВыполнитьУзел(ТекУзел, Уровень+1);
        Если ПустоеЗначение(Результат) = 1 Тогда Возврат 0; КонецЕсли; //аварийный стоп по первой же ошибке
    КонецЦикла;
    
    Возврат 1;
КонецФункции //ВыполнитьУзел()
9 Злопчинский
 
27.02.15
15:56
Это у меня сильный ховнокод? или не очень?
10 Ёпрст
 
27.02.15
16:04
а чего не сразу бегаешь по нужным узлам ?

Узел=xmlDoc.selectNodes(".//НУЖНЫЙУЗЕЛ01"); // без точки - все узлы, с точкой - подчиненные
11 Злопчинский
 
27.02.15
16:15
(10) Вот оно как, Михалыч!
Спасибо за подсказку

да вообщем обработка идет последовательно, необходимости по дереву метаться пока нет... просто пропускаются ненужные...

один фиг последовательно ходить - вручную выбирая нужную последовательность - или идти штатно последовательно...

как-то так я себе мыслю...

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

или я может что неправильно понимаю...?
12 Ёпрст
 
27.02.15
16:19
ну, открываешь выборку только нужных узлов, унутри еще выборку подчиненных, если надо (и так далее).. всё собственно
13 Злопчинский
 
27.02.15
16:29
(12) это понятно...

но вот, например, если какие-то теги должны обрабатываться строго после предыдущих каких-то - то селектами придется самому за этим следить - так?

а если читать последовательно дерево - то "оно само" - при условии что сформировано правильно - так?
Глупец, лишенный способности посмеяться над собой вместе с другими, не сможет долго выносить программирование. Фредерик Брукс-младший