Розбір xml документа за допомогою xdto, без використання xdto-пакетів і xml-схем (для дуже ледачих)

Як розібрати XML Документ за допомогою XDTO без змін в конфігурації, без XML-схем даних, і при цьому не випасти з помилкою "мало пам'яті". Тим більше що вам цей XML Документ потрібно вважати разово.

Освоївши один раз просте послідовне читання XML, для одноразового зчитування XML файлів, я не вдавався до якихось інших способів, до того поки мені не зустрілася завдання по завантаженню даних з "Скаженого" файлу.

ІТС: Оптимізація використання оперативної пам'яті.
Неприпустимо працювати з великими XML документами за допомогою об'єктів вбудованої мови, призначених для обробки файлів цілком: текстові документи в ТекстовийДокумент, XML в ДокументDOM і HTML в ДокументHTML, а також створювати в пам'яті XDTO-пакети розміром з весь XML-файл цілком.

В іншому випадку, весь файл завантажується в оперативну пам'ять цілком. Винятки становлять окремі випадки, коли необхідний довільний доступ до вмісту файлу, до якоїсь конкретної його частини.

Слід використовувати об'єкти для послідовного запису і послідовного читання: ЧтеніеXML, ЧтеніеТекста, ЗапісьXML, ЗапісьТекста, за допомогою яких можна прочитати файл порціями і витрачати пам'ять економно.

При використанні механізмів XDTO неправильно зачитувати в пам'ять весь XML-файл цілком (ФабрікаXTDO.ПрочітатьXML (ЧтеніеXML)). Замість цього слід зачитувати XML-файл послідовно, за допомогою об'єкта ЧтеніеXML, а його окремі фрагменти (теги) десеріалізовивать за допомогою фабрики XDTO.

я як і годиться вже на файлі в 300 МБ, впевнено намацав стандартне 1С-кое "Мало пам'яті" і аут. Переконався на практиці що в XDTO пхати весь файл не добре. Але повернуся до цитати з ІТС-а, в ній адже є частина відповіді, що робити і як. І я от не знайшов реального прикладу, який би був простий, без використання XDTO-пакетів, XML-схем і в той же час відповідав вимогам 1С в частині оптимізації використання оперативної пам'яті. І довелося трохи подумати і ось що з цього вийшло:

У цьому прикладі XML документ починає розбиратися звичайним читанням, поки не дійде до потрібного вузла. Цей вузол якраз представляє шуканий об'єкт, в нашому випадку це Номенклатура (далі як в XML-файлі "ПРОПОЗИЦІЯ") і далі файл розбирається вже по вузлах, послідовно. Одне речення за іншим. У кожному з пропозицій, я вже отримую розділені дані, що відносяться саме до цього об'єкту (пропозицією). Швидкість роботи: 29 000 пропозицій (а одна пропозиція має досить велику кількість реквізитів та властивостей частина з них видно на першому скріншоті) на средненько ноутбуці були розібрані за 1,5 хвилини.

У доданому файлі лежать: Обробка - приклад читаюча дані по вищеописаного алгоритму і XML файл приклад містить 10 позицій для того щоб можна було протестувати обробку, і подивитися більш детально на все в отладчике. Обробка писалася під платформою 8.2 для звичайних форм.

Можливо, вважаєте це збоченням, можливо ні. Залишайте будь ласка свою думку, цікаво дізнатися може цей шлях можна було пройти по іншому.