При работе с файлами формата XML в среде 1С:Предприятие часто возникают ситуации, когда данные хранятся не в атрибутах открывающего тега, а непосредственно в текстовом узле между открывающим и закрывающим тегом, например: <date_received_request>2022-07-06</date_received_request>. Разберем, как эффективно извлекать такие данные, не допуская типичных ошибок.
Когда вы используете объект ЧтениеXML, вы последовательно перемещаетесь по узлам документа. Одной из самых частых ошибок является попытка вызвать метод ЗначениеАтрибута() для элемента, который не имеет атрибутов. Важно помнить: метод ЗначениеАтрибута() предназначен строго для работы с данными, записанными внутри тега (например, <Блюдо Название="Щи"/>).
Для того чтобы считать значение, расположенное между тегами, необходимо выполнить следующие действия:
Прочитать().Прочитать() еще раз для перехода к содержимому.Значение объекта ЧтениеXML, которое в этот момент будет содержать текст, заключенный между тегами.Давайте рассмотрим, как это выглядит в программном коде. Чтобы корректно считать данные, мы должны убедиться, что находимся на узле типа Текст.
Чтение = Новый ЧтениеXML;
Чтение.ОткрытьФайл("путь_к_файлу.xml");
Пока Чтение.Прочитать() Цикл
Если Чтение.ТипУзла = ТипУзлаXML.НачалоЭлемента И Чтение.Имя = "date_received_request" Тогда
// Переходим к содержимому тега
Чтение.Прочитать();
Если Чтение.ТипУзла = ТипУзлаXML.Текст Тогда
ЗначениеТекста = Чтение.Значение;
// Теперь в переменной ЗначениеТекста хранится "2022-07-06"
КонецЕсли;
КонецЕсли;
КонецЦикла;
Чтение.Закрыть();
Если структура вашего XML-файла сложная или объем данных велик, ручной обход через ЧтениеXML может стать утомительным и подверженным ошибкам. В таких случаях мы рекомендуем использовать ФабрикуXDTO. Это мощный инструмент, который позволяет десериализовать XML непосредственно в объектную модель 1С.
Преимущество ФабрикиXDTO заключается в том, что она берет на себя всю работу по парсингу структуры. Вам достаточно иметь описание схемы (XSD) или позволить платформе автоматически определить структуру объекта. При использовании этого метода вам не нужно беспокоиться о типах узлов или последовательности вызова метода Прочитать().
При написании собственного парсера всегда учитывайте следующие нюансы:
ЧтениеXML. Попытка загрузить такой файл целиком в память через ПостроительDOM приведет к критической ошибке нехватки оперативной памяти.Подводя итог, можно сказать, что чтение данных между тегами — это стандартная задача. Для простых задач используйте ЧтениеXML, аккуратно работая с методами чтения и свойствами текущего узла. Для корпоративного обмена данными и сложных структур всегда отдавайте предпочтение ФабрикеXDTO, так как это значительно сокращает объем написанного кода и минимизирует вероятность ошибок при изменении формата данных.