|
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) это понятно...
но вот, например, если какие-то теги должны обрабатываться строго после предыдущих каких-то - то селектами придется самому за этим следить - так? а если читать последовательно дерево - то "оно само" - при условии что сформировано правильно - так? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |