Читайте дальше...
Создание XML из структуры и соответствия
// Преобразование структуры в XML-документ
Процедура СоздатьXMLИзСтруктуры()
// Создаем XML-документ
XML = Новый ЗаписьXML;
XML.УстановитьСтроку();
XML.ЗаписатьОбъявлениеXML();
// Корневой элемент
XML.ЗаписатьНачалоЭлемента("Данные");
// Записываем элементы
XML.ЗаписатьНачалоЭлемента("Имя");
XML.ЗаписатьТекст("Иван Петров");
XML.ЗаписатьКонецЭлемента();
XML.ЗаписатьНачалоЭлемента("Возраст");
XML.ЗаписатьТекст("30");
XML.ЗаписатьКонецЭлемента();
XML.ЗаписатьНачалоЭлемента("Активен");
XML.ЗаписатьТекст("Истина");
XML.ЗаписатьКонецЭлемента();
XML.ЗаписатьКонецЭлемента(); // Данные
Результат = XML.Закрыть();
Сообщить("Созданный XML:");
Сообщить(Результат);
КонецПроцедуры
Сериализация структуры и массива в XML
// Сериализация сложных типов данных в XML
Процедура СериализоватьСтруктуруВXML()
// Подготавливаем данные
Данные = Новый Структура;
Данные.Вставить("Товар", "Ноутбук");
Данные.Вставить("Цена", 50000);
Данные.Вставить("Склад", "Основной");
// Сериализуем в XML
XML = Новый ЗаписьXML;
XML.УстановитьСтроку();
XML.ЗаписатьОбъявлениеXML();
СериализоватьСтруктуру(XML, Данные, "ТоварнаяПозиция");
Результат = XML.Закрыть();
Сообщить("Сериализованная структура:");
Сообщить(Результат);
// Сериализация массива
Массив = Новый Массив;
Массив.Добавить("Первый");
Массив.Добавить("Второй");
Массив.Добавить("Третий");
XML2 = Новый ЗаписьXML;
XML2.УстановитьСтроку();
XML2.ЗаписатьОбъявлениеXML();
СериализоватьМассив(XML2, Массив, "Список", "Элемент");
Результат2 = XML2.Закрыть();
Сообщить("Сериализованный массив:");
Сообщить(Результат2);
КонецПроцедуры
Процедура СериализоватьСтруктуру(XML, Данные, ИмяКорня)
XML.ЗаписатьНачалоЭлемента(ИмяКорня);
Для Каждого КлючЗначение Из Данные Цикл
XML.ЗаписатьНачалоЭлемента(КлючЗначение.Ключ);
XML.ЗаписатьТекст(Строка(КлючЗначение.Значение));
XML.ЗаписатьКонецЭлемента();
КонецЦикла;
XML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Процедура СериализоватьМассив(XML, Массив, ИмяМассива, ИмяЭлемента)
XML.ЗаписатьНачалоЭлемента(ИмяМассива);
Для Каждого Элемент Из Массив Цикл
XML.ЗаписатьНачалоЭлемента(ИмяЭлемента);
XML.ЗаписатьТекст(Строка(Элемент));
XML.ЗаписатьКонецЭлемента();
КонецЦикла;
XML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Десериализация XML в структуру
// Чтение XML-документа и преобразование в структуру данных
Процедура ДесериализоватьXMLВСтруктуру()
XMLСтрока = "
|<Книга>
| <Название>Мастер и Маргарита</Название>
| <Автор>Михаил Булгаков</Автор>
| <Год>1966</Год>
| <Цена>500</Цена>
|</Книга>";
// Читаем XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
// Парсим XML в структуру
Данные = ПарситьXMLВСтруктуру(ЧтениеXML);
Сообщить("Десериализованные данные:");
Сообщить("Название: " + Данные.Название);
Сообщить("Автор: " + Данные.Автор);
Сообщить("Год: " + Данные.Год);
Сообщить("Цена: " + Данные.Цена);
КонецПроцедуры
Функция ПарситьXMLВСтруктуру(ЧтениеXML)
Результат = Новый Структура;
// Читаем корневой элемент
ЧтениеXML.Прочитать();
// Читаем все дочерние элементы
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяЭлемента = ЧтениеXML.Имя;
ЧтениеXML.Прочитать();
Значение = ЧтениеXML.Значение;
Результат.Вставить(ИмяЭлемента, Значение);
ЧтениеXML.Прочитать(); // Пропускаем конец элемента
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Работа с атрибутами XML
// Чтение и запись XML с атрибутами
Процедура РаботаСАтрибутамиXML()
// Создаем XML с атрибутами
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудники");
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудник");
ЗаписьXML.ЗаписатьАтрибут("Ид", "1");
ЗаписьXML.ЗаписатьАтрибут("Отдел", "ИТ");
ЗаписьXML.ЗаписатьТекст("Иванов Иван");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудник");
ЗаписьXML.ЗаписатьАтрибут("Ид", "2");
ЗаписьXML.ЗаписатьАтрибут("Отдел", "Бухгалтерия");
ЗаписьXML.ЗаписатьТекст("Петрова Мария");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента(); // Сотрудники
XMLСтрока = ЗаписьXML.Закрыть();
Сообщить("XML с атрибутами:");
Сообщить(XMLСтрока);
// Читаем XML с атрибутами
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
Сообщить("Прочитанные данные:");
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента И ЧтениеXML.Имя = "Сотрудник" Тогда
Ид = ЧтениеXML.ПолучитьАтрибут("Ид");
Отдел = ЧтениеXML.ПолучитьАтрибут("Отдел");
ЧтениеXML.Прочитать();
Имя = ЧтениеXML.Значение;
Сообщить("Сотрудник: " + Имя + " | Ид: " + Ид + " | Отдел: " + Отдел);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Сохранение и загрузка XML в файл
// Запись XML в файл и чтение XML из файла
Процедура СохранитьИЗагрузитьXMLФайл()
ИмяФайла = "C:\Temp\data.xml";
// Подготавливаем данные
Данные = Новый Структура;
Данные.Вставить("Организация", "ООО Ромашка");
Данные.Вставить("ИНН", "7700000001");
Данные.Вставить("ЮрАдрес", "г. Москва, ул. Тверская, д. 10");
// Запись в файл
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Организация");
Для Каждого КлючЗначение Из Данные Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(КлючЗначение.Ключ);
ЗаписьXML.ЗаписатьТекст(Строка(КлючЗначение.Значение));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
XMLСтрока = ЗаписьXML.Закрыть();
Запись = Новый ЗаписьТекста(ИмяФайла, КодировкаТекста.UTF8);
Запись.Записать(XMLСтрока);
Запись.Закрыть();
Сообщить("XML сохранен в файл: " + ИмяФайла);
// Чтение из файла
Чтение = Новый ЧтениеТекста(ИмяФайла, КодировкаТекста.UTF8);
ПрочитаннаяСтрока = Чтение.Прочитать();
Чтение.Закрыть();
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ПрочитаннаяСтрока);
ВосстановленныеДанные = ПарситьXMLВСтруктуру(ЧтениеXML);
ЧтениеXML.Закрыть();
Сообщить("Прочитано из файла:");
Для Каждого КлючЗначение Из ВосстановленныеДанные Цикл
Сообщить(КлючЗначение.Ключ + ": " + КлючЗначение.Значение);
КонецЦикла;
// Удаляем файл
УдалитьФайлы(ИмяФайла);
КонецПроцедуры
Функция ПарситьXMLВСтруктуру(ЧтениеXML)
Результат = Новый Структура;
ЧтениеXML.Прочитать();
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ИмяЭлемента = ЧтениеXML.Имя;
ЧтениеXML.Прочитать();
Если ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Результат.Вставить(ИмяЭлемента, ЧтениеXML.Значение);
ЧтениеXML.Прочитать();
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Сериализация таблицы значений в XML
// Экспорт таблицы значений в XML-формат
Процедура ТаблицаЗначенийВXML()
// Создаем таблицу
Таблица = Новый ТаблицаЗначений;
Таблица.Колонки.Добавить("Код", Новый ОписаниеТипов("Число"));
Таблица.Колонки.Добавить("Наименование");
Таблица.Колонки.Добавить("Цена", Новый ОписаниеТипов("Число"));
Таблица.Добавить().Код = 1; Таблица[0].Наименование = "Ноутбук"; Таблица[0].Цена = 50000;
Таблица.Добавить().Код = 2; Таблица[1].Наименование = "Монитор"; Таблица[1].Цена = 15000;
Таблица.Добавить().Код = 3; Таблица[2].Наименование = "Клавиатура"; Таблица[2].Цена = 2000;
// Сериализуем таблицу в XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Товары");
ЗаписьXML.ЗаписатьНачалоЭлемента("Колонки");
Для Каждого Колонка Из Таблица.Колонки Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Колонка");
ЗаписьXML.ЗаписатьАтрибут("Имя", Колонка.Имя);
ЗаписьXML.ЗаписатьАтрибут("Тип", Строка(Колонка.ТипЗначения));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Строки");
Для Каждого СтрокаТ Из Таблица Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента("Строка");
ЗаписьXML.ЗаписатьАтрибут("Номер", Строка(СтрокаТ.Код));
Для Каждого Колонка Из Таблица.Колонки Цикл
ЗаписьXML.ЗаписатьНачалоЭлемента(Колонка.Имя);
ЗаписьXML.ЗаписатьТекст(Строка(СтрокаТ[Колонка.Имя]));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
XMLСтрока = ЗаписьXML.Закрыть();
Сообщить("Таблица значений в XML:");
Сообщить(XMLСтрока);
// Десериализуем обратно в таблицу
НоваяТаблица = XMLВТаблицуЗначений(XMLСтрока);
Сообщить("Восстановленная таблица:");
Для Каждого СтрокаТ Из НоваяТаблица Цикл
Сообщить(СтрокаТ.Код + " | " + СтрокаТ.Наименование + " | " + СтрокаТ.Цена);
КонецЦикла;
КонецПроцедуры
Функция XMLВТаблицуЗначений(XMLСтрока)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
Таблица = Новый ТаблицаЗначений;
ВКолонках = Ложь;
ВСтроках = Ложь;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ЧтениеXML.Имя = "Колонки" Тогда
ВКолонках = Истина;
ИначеЕсли ЧтениеXML.Имя = "Строки" Тогда
ВСтроках = Истина;
ИначеЕсли ВКолонках И ЧтениеXML.Имя = "Колонка" Тогда
ИмяКолонки = ЧтениеXML.ПолучитьАтрибут("Имя");
Таблица.Колонки.Добавить(ИмяКолонки);
ИначеЕсли ВСтроках И ЧтениеXML.Имя = "Строка" Тогда
НоваяСтрока = Таблица.Добавить();
ИначеЕсли ВСтроках И Таблица.Колонки.Найти(ЧтениеXML.Имя) <> Неопределено Тогда
НоваяСтрока = Таблица[Таблица.Количество() - 1];
ЧтениеXML.Прочитать();
НоваяСтрока[ЧтениеXML.Имя] = ЧтениеXML.Значение;
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Если ЧтениеXML.Имя = "Колонки" Тогда
ВКолонках = Ложь;
ИначеЕсли ЧтениеXML.Имя = "Строки" Тогда
ВСтроках = Ложь;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Таблица;
КонецФункции
Иерархический XML с вложенными элементами
// Создание и обработка вложенных XML-структур
Процедура ИерархическийXML()
// Создаем XML с вложенными элементами
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("Компания");
ЗаписьXML.ЗаписатьНачалоЭлемента("Реквизиты");
ЗаписьXML.ЗаписатьНачалоЭлемента("Название");
ЗаписьXML.ЗаписатьТекст("ООО Ромашка");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("ИНН");
ЗаписьXML.ЗаписатьТекст("7700000001");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Отделы");
ЗаписьXML.ЗаписатьНачалоЭлемента("Отдел");
ЗаписьXML.ЗаписатьАтрибут("Название", "ИТ");
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудники");
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудник");
ЗаписьXML.ЗаписатьАтрибут("Ид", "1");
ЗаписьXML.ЗаписатьТекст("Иванов Иван");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьНачалоЭлемента("Сотрудник");
ЗаписьXML.ЗаписатьАтрибут("Ид", "2");
ЗаписьXML.ЗаписатьТекст("Петров Петр");
ЗаписьXML.ЗаписатьКонецЭлемента();
ЗаписьXML.ЗаписатьКонецЭлемента(); // Сотрудники
ЗаписьXML.ЗаписатьКонецЭлемента(); // Отдел
ЗаписьXML.ЗаписатьКонецЭлемента(); // Отделы
ЗаписьXML.ЗаписатьКонецЭлемента(); // Компания
XMLСтрока = ЗаписьXML.Закрыть();
Сообщить("Иерархический XML:");
Сообщить(XMLСтрока);
// Рекурсивный разбор иерархического XML
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
Сообщить("Разбор иерархической структуры:");
РазобратьXMLРекурсивно(ЧтениеXML, "");
КонецПроцедуры
Процедура РазобратьXMLРекурсивно(ЧтениеXML, Отступ)
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Сообщить(Отступ + "<" + ЧтениеXML.Имя + ">");
// Выводим атрибуты
Если ЧтениеXML.КоличествоАтрибутов() > 0 Тогда
Для Каждого Атрибут Из ЧтениеXML.Атрибуты Цикл
Сообщить(Отступ + " Атрибут: " + Атрибут.Имя + "='" + Атрибут.Значение + "'");
КонецЦикла;
КонецЕсли;
// Рекурсивно разбираем содержимое
РазобратьXMLРекурсивно(ЧтениеXML, Отступ + " ");
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст И Не ПустаяСтрока(ЧтениеXML.Значение) Тогда
Сообщить(Отступ + "Значение: " + ЧтениеXML.Значение);
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента Тогда
Сообщить(Отступ + "</" + ЧтениеXML.Имя + ">");
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Преобразование XML в JSON и обратно
// Конвертация между XML и JSON форматами
Процедура XMLВJSON()
// Исходный XML
XMLСтрока = "
|<Заказ>
| <Номер>З-001</Номер>
| <Дата>2024-01-15</Дата>
| <Позиции>
| <Позиция>
| <Код>1</Код>
| <Товар>Ноутбук</Товар>
| <Количество>2</Количество>
| </Позиция>
| <Позиция>
| <Код>2</Код>
| <Товар>Монитор</Товар>
| <Количество>1</Количество>
| </Позиция>
| </Позиции>
|</Заказ>";
// Конвертируем XML в структуру
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
Данные = РазобратьXMLВСтруктуруПолный(ЧтениеXML);
// Конвертируем структуру в JSON
ЗаписьJSON = Новый ЗаписьJSON;
ЗаписьJSON.УстановитьСтроку();
ЗаписатьJSON(ЗаписьJSON, Данные);
JSONСтрока = ЗаписьJSON.Закрыть();
Сообщить("Конвертированный JSON:");
Сообщить(JSONСтрока);
// Конвертируем обратно JSON в XML
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(JSONСтрока);
ВосстановленныеДанные = ПрочитатьJSON(ЧтениеJSON);
ЧтениеJSON.Закрыть();
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.УстановитьСтроку();
ЗаписьXML.ЗаписатьОбъявлениеXML();
СериализоватьСтруктуруВXML(ЗаписьXML, ВосстановленныеДанные, "Корень");
ВосстановленныйXML = ЗаписьXML.Закрыть();
Сообщить("Восстановленный XML:");
Сообщить(ВосстановленныйXML);
КонецПроцедуры
Функция РазобратьXMLВСтруктуруПолный(ЧтениеXML)
Результат = Новый Структура;
ТекущийЭлемент = "";
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
ТекущийЭлемент = ЧтениеXML.Имя;
// Проверяем, может быть это массив
Если Не Результат.Свойство(ТекущийЭлемент) Тогда
Результат.Вставить(ТекущийЭлемент, "");
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.Текст Тогда
Если ТекущийЭлемент <> "" Тогда
Результат[ТекущийЭлемент] = ЧтениеXML.Значение;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
Процедура СериализоватьСтруктуруВXML(ЗаписьXML, Данные, ИмяЭлемента)
ЗаписьXML.ЗаписатьНачалоЭлемента(ИмяЭлемента);
Для Каждого КлючЗначение Из Данные Цикл
Если ТипЗнч(КлючЗначение.Значение) = Тип("Структура") Тогда
СериализоватьСтруктуруВXML(ЗаписьXML, КлючЗначение.Значение, КлючЗначение.Ключ);
ИначеЕсли ТипЗнч(КлючЗначение.Значение) = Тип("Массив") Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента(КлючЗначение.Ключ);
Для Каждого ЭлементМассива Из КлючЗначение.Значение Цикл
СериализоватьСтруктуруВXML(ЗаписьXML, ЭлементМассива, "Элемент");
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
Иначе
ЗаписьXML.ЗаписатьНачалоЭлемента(КлючЗначение.Ключ);
ЗаписьXML.ЗаписатьТекст(Строка(КлючЗначение.Значение));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЦикла;
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецПроцедуры
Валидация XML с использованием XSD-схемы
// Проверка XML-документа на соответствие схеме (XSD)
Процедура ВалидацияXMLПоСхеме()
// Пример XSD-схемы (упрощенной)
XSDСхема = "
|<?xml version='1.0' encoding='UTF-8'?>
|<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema'>
| <xs:element name='Книга'>
| <xs:complexType>
| <xs:sequence>
| <xs:element name='Название' type='xs:string'/>
| <xs:element name='Автор' type='xs:string'/>
| <xs:element name='Год' type='xs:integer'/>
| <xs:element name='Цена' type='xs:decimal'/>
| </xs:sequence>
| </xs:complexType>
| </xs:element>
|</xs:schema>";
// Корректный XML
КорректныйXML = "
|<Книга>
| <Название>Война и мир</Название>
| <Автор>Лев Толстой</Автор>
| <Год>1869</Год>
| <Цена>800</Цена>
|</Книга>";
// Некорректный XML (отсутствует обязательный элемент)
НекорректныйXML = "
|<Книга>
| <Название>Преступление и наказание</Название>
| <Автор>Федор Достоевский</Автор>
| <Год>1866</Год>
|</Книга>";
// Эмуляция валидации (встроенной поддержки XSD в 1С нет, но можно реализовать базовую проверку)
Функция ВалидироватьXML(XMLСтрока, ОбязательныеЭлементы)
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(XMLСтрока);
НайденныеЭлементы = Новый Массив;
ВнутриКорня = Ложь;
Пока ЧтениеXML.Прочитать() Цикл
Если ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Если ВнутриКорня Тогда
НайденныеЭлементы.Добавить(ЧтениеXML.Имя);
Иначе
ВнутриКорня = Истина;
КонецЕсли;
ИначеЕсли ЧтениеXML.ТипУзла = ТипУзлаXML.КонецЭлемента И ВнутриКорня Тогда
Прервать;
КонецЕсли;
КонецЦикла;
// Проверяем наличие всех обязательных элементов
Для Каждого Элемент Из ОбязательныеЭлементы Цикл
Если НайденныеЭлементы.Найти(Элемент) = Неопределено Тогда
Возврат "Отсутствует обязательный элемент: " + Элемент;
КонецЕсли;
КонецЦикла;
Возврат "OK";
КонецФункции
Обязательные = Новый Массив;
Обязательные.Добавить("Название");
Обязательные.Добавить("Автор");
Обязательные.Добавить("Год");
Обязательные.Добавить("Цена");
Результат1 = ВалидироватьXML(КорректныйXML, Обязательные);
Сообщить("Валидация корректного XML: " + Результат1);
Результат2 = ВалидироватьXML(НекорректныйXML, Обязательные);
Сообщить("Валидация некорректного XML: " + Результат2);
КонецПроцедуры
Примечания
// Важные особенности работы с XML в 1С:
// 1. Для записи XML используются объекты ЗаписьXML, для чтения - ЧтениеXML
// 2. Всегда начинайте с ЗаписатьОбъявлениеXML() для корректного XML-документа
// 3. Атрибуты записываются перед текстовым содержимым элемента
// 4. Типы узлов: НачалоЭлемента, КонецЭлемента, Текст, Атрибут
// 5. Для чтения атрибутов используйте метод ПолучитьАтрибут()
// 6. Вложенные элементы создают иерархическую структуру документа
// 7. При парсинге XML учитывайте возможные пространства имен
// 8. Для работы с большими XML-файлами используйте построчное чтение
// 9. Экранирование спецсимволов (<, >, & и др.) выполняется автоматически
// 10. При сериализации таблицы значений рекомендуется сохранять структуру колонок
// 11. Встроенной валидации по XSD-схемам в платформе 1С нет, реализуйте свою логику проверки
// 12. XML-документы удобно использовать для обмена данными с внешними системами








