Упрощаем чтение XML или любите СП — источник знаний (2)

08.02.14

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

Функция преобразования xml в структуру

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
чтение
.zip 5,83Kb ver:1
43 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

 

Однаждый Джоель Мозес (англ. Joel Moses) сказал «APL как красивый бриллиант — безупречный, симметричный. Но вы ничего не можете к нему добавить. Если вы попытаетесь приклеить к нему другой алмаз — вы не получите бóльший алмаз. Лисп же — это ком грязи. Добавь еще и он останется комом грязи — он все еще будет выглядеть как Лисп.» Для меня, кроме лиспа, таким комом грязи стал XML. На протяжении долгого времени на эти значки < и > натягивают все больше и больше семантики. Появляются страшные слова -  DTD,  xsd, xslt, RDF .... Сегодня уже вовсю идет подготовка к Xforms, и кто знает что еще прикрутят к этому формату завтра? Кассанрой работать всегда тяжело, но одно знаю точно — XML останется XML — заголовок и корневой элемент, открывающие и закрывающие тэги, текстовое представление — останется всегда. А раз так — то вечным будет вопрос — как прочитать XML и работать с ним?

Многие пишут свои универсальные функции которые разбирают XML в дерево, в таблицу значений, в массив или как в этой заметке — в структуру. У всех этих способов есть свои плюсы и минусы.

Плюсы подхода изложенного в этой заметке — типизация полученного результата.

Минусы — время работы, объем потребляемой памяти. Поэтому для чтения больших файлов (более 5 kb) слабо подходит.

 

Для примера используется такое определение XSD

 

и вот такой xml для теста

 

Код для преобразования -

 

Функция xdto2struct(XDTO)
	структураОбъекта = новый Структура;
	Для каждого х Из XDTO.свойства() Цикл
		Попытка
			// пусть так определяется что это список. Может и лучше можно, не знаю.
			ПрочитаноеЗначение= XDTO.ПолучитьСписок(х);	
		Исключение
			ПрочитаноеЗначение= XDTO.Получить(х);
		КонецПопытки;
		типЭлемента = типЗнч(ПрочитаноеЗначение);
		если  типЭлемента = тип("ОбъектXDTO") тогда
			структураОбъекта.Вставить(х.Имя,xdto2struct(ПрочитаноеЗначение));
		иначеесли типЭлемента  = тип("СписокXDTO") тогда
			структураОбъекта.Вставить(х.Имя, list2array(ПрочитаноеЗначение));
		иначе
			/// простое значение
			структураОбъекта.Вставить(х.Имя,ПрочитаноеЗначение);
		КонецЕсли;
	КонецЦикла;
	Возврат структураОбъекта;
КонецФункции

функция list2array(listXdto)
	массивВозврата = новый Массив;
	для каждого у из listXdto цикл
		массивВозврата.Добавить(новый Структура("Тип,Значение",ТипВСтруктуру(у.тип()),xdto2struct(у)));
	конецЦикла;
	возврат массивВозврата;
КонецФункции

Функция ТипВСтруктуру(типРазбора)
	Возврат  Новый Структура("URI,имя",типРазбора.URIПространстваИмен ,типРазбора.Имя);
КонецФункции

 

При помощи этого кода легко и быстро можно превратить входящий xml в структуру и затем уже работать с ней в своем приложении.

Вот так будет выглядеть корневой элемент

 

На этом скриншоте - элементы массива (кстати, если XML  - простой (нет пересекающихся имен типов) можно легко отказаться от описания типа)

 

 

Так выглядит загруженный элемент one (обратите внимание что тэг age - уже приведен к числу, согласно схемы)

 

 

 

В обработке прикрепленной к заметке — тот же самый код (плюс несколько несложных сервисных функций)

 

 

Вступайте в нашу телеграмм-группу Инфостарт

xml xdto чтение

См. также

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой

55778 50200 руб.

15.04.2019    78719    211    162    

150

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    177873    327    274    

396

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

27660 руб.

12.06.2017    152192    887    302    

461

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    41678    119    75    

112

Операции по ВЭД Файловый обмен (TXT, XML, DBF), FTP Программист Бухгалтер 1С v8.3 Бухгалтерский учет 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Бухгалтерский учет Платные (руб)

Федеральная таможенная служба России давно поддерживает унифицированный формат электронных документов для обмена с информационными системами предприятий. xmlns="urn:customs.ru:Information:ExchangeDocuments:". Структура, утвержденная комиссией Таможенного союза. Осталось только сделать загрузку в 1С из этого формата. На выходе - два документа ГТД по импорту и Поступление (акты, накладные) Обработка актуализирована на начало 2025 года

4800 руб.

09.08.2016    88495    329    378    

89

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Бухгалтер Пользователь 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 24.09.2025, версия 9.12 - 10.4)

19200 руб.

20.11.2015    167024    416    386    

538

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист 1С v8.3 Сложные периодические расчеты 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Платные (руб)

Правила переноса кадровых и расчетных данных и справочной информации из "1С:УПП1.3" или "1С:КА 1.1" в "1С:ЗУП 3.1 | Разработан в формате КД 2 (правила конвертации данных) | При выгрузке есть фильтр по организациям | Обновляется при выходе новых релизов 1С | Развитие алгоритмов | Расчетные документы переносятся в документ "Перенос данных" | Создаются документы "Начальная штатная расстановка" и "Начальная задолженность по зарплате", переносятся кадровые документы

55778 50200 руб.

29.10.2018    58959    67    120    

67

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.255.x) и БП 3.0 (3.0.183.x). Правила подходят для версии ПРОФ и КОРП.

38000 руб.

15.12.2021    29321    211    58    

156
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Yashazz 4876 09.02.14 15:23 Сейчас в теме
Пхе. В своё время я написал функцию-универсалку, которая любой XDTO-объект раздербанивает в коллекции 1С (например, в дерево, в строках которого массивы, или структуры, или ещё что, короче, полностью соответствуя структуре исходного объекта). Короче, усложнённый вариант вашей версии. Разумеется, исходя из его URI и фабрики. Но и то публиковать не стал, ибо техническая вспомогательная хрень.

А вы, автор, совсем простые вещи эдак разжёвываете... Зачем? Всё равно, что перебор элементов массива объяснять статьёй на 5 страниц.

Кстати, конечно же, можно определять факт "списочности" иначе. Например, навскидку, так:
Если СвойствоXDTO.НижняяГраница=0 и СвойствоXDTO.ВерхняяГраница=-1 Тогда // списочный
ну или учитывать, что кол-во в списке может быть ограничено, и тогда уж исходя из него ))

2. so-quest 140 09.02.14 19:38 Сейчас в теме
вы абсолютно во всем правы. Для себя скачал вашу разработку http://infostart.ru/public/203514/ буду неделю изучать и приобщаться к мудрости.

И да, - в заголовке ясно указано - любите СП. Но чукча же не читатель...
3. iov 408 10.02.14 15:42 Сейчас в теме
В закладочки на память. Автору спасибо очень полезная статья.
4. WEBBY 10.02.14 23:05 Сейчас в теме
Здорово! Спасибо автору!
5. пользователь 11.02.14 00:36
Сообщение было скрыто модератором.
...
6. GVasiliy 22 13.02.14 12:56 Сейчас в теме
Автор, поменяйте "попытку" на проверку:

ТипЗнч( ... ) = Тип("СписокXDTO")

ТипЗнч( ... ) = Тип("ОбъектXDTO").
7. so-quest 140 13.02.14 13:08 Сейчас в теме
да я бы с удовольствием, но анализируется не значение, а свойство. и все обламывает...
В (0) опытные разработчики советуют вариант без попытки (там тоже есть ограничения)

в принципе мне хватало всегда проверки
Если х.НижняяГраница=х.ВерхняяГраница и х.ВерхняяГраница=1 Тогда // наверное список
но подобная практика пару раз приводила к ошибкам (правда на 8.1 ) поэтому здесь и сделал через попытку. С точки зрения быстродействия вариант с попыткой проходит - потери не большие, да и читается проще
Dethmontt; +1 Ответить
Для отправки сообщения требуется регистрация/авторизация