Как преобразовать XSL в XML: разбор понятий, работа с XSLT-трансформацией и исправление ошибок форматов

Программист IT и автоматизация бизнеса
← На главную

Вопрос преобразования одного формата данных в другой — классическая задача при интеграции систем. Однако формулировка "преобразовать XSL в XML" часто вызывает недоумение у опытных специалистов, так как содержит в себе либо терминологическую неточность, либо банальную опечатку. В этой статье мы подробно разберем все возможные смыслы этого запроса, проанализируем структуру файлов и рассмотрим, как решать подобные задачи в контексте платформы 1С:Предприятие.

Понимание природы форматов XSL и XML

Для начала разберемся с теорией, чтобы исключить концептуальные ошибки. Как верно было подмечено в обсуждении, сама постановка вопроса может быть двоякой.

XSL (eXtensible Stylesheet Language) — это язык, предназначенный для обработки и трансформации XML-документов. Чаще всего, говоря об XSL, мы подразумеваем XSLT (XSL Transformations).

XML (eXtensible Markup Language) — это расширяемый язык разметки, используемый для хранения и передачи структурированных данных.

Важно понимать фундаментальный факт: XSL-файл сам по себе является валидным XML-документом. Он следует всем правилам синтаксиса XML: имеет корневой элемент, иерархию тегов, атрибуты и т.д. Если открыть файл с расширением .xsl в любом текстовом редакторе или браузере, мы увидим структуру XML.

Поэтому, если ваша задача звучит буквально "сделать из XSL файла XML файл", то решение элементарно:

  1. Скопируйте файл.
  2. Измените расширение файла с .xsl на .xml.

С точки зрения файловой системы и парсеров, содержимое не изменится, и файл будет читаться как корректный XML. Однако практическая польза от такого действия стремится к нулю, если мы не понимаем контекст. Рассмотрим реальные сценарии, которые могут скрываться за этим вопросом.

Сценарий 1: XSLT-трансформация (Получение XML из XML с помощью XSL)

Наиболее вероятный технический смысл вопроса — это выполнение XSLT-преобразования. В этом случае XSL выступает не как исходный материал для конвертации, а как инструмент (инструкция), с помощью которого один XML превращается в другой XML с новой структурой.

Процесс выглядит следующим образом:

  1. У нас есть Входящий XML (данные).
  2. У нас есть Файл XSL (правила преобразования).
  3. Мы запускаем процессор трансформации.
  4. На выходе получаем Исходящий XML.

В платформе 1С:Предприятие для этих целей предусмотрен встроенный объект ПреобразованиеXSL. Давайте рассмотрим, как программно реализовать этот процесс.

Для выполнения трансформации нам понадобятся методы ЗагрузитьXSL и Преобразовать. Проанализируем пример кода:


// Создаем объект преобразования
Преобразование = Новый ПреобразованиеXSL;

// Загружаем файл стилей (наш XSL)
// Это именно тот файл, который содержит правила "как сделать из одного XML другой"
Преобразование.ЗагрузитьXSL("C:\Data\rules.xsl");

// Выполняем преобразование
// Первым параметром указываем путь к файлу с данными (XML)
// Вторым параметром указываем путь, куда сохранить результат (новый XML)
Преобразование.Преобразовать("C:\Data\source_data.xml", "C:\Data\result_data.xml");

В данном примере мы используем XSL-файл по его прямому назначению. Если ваша задача состояла в том, чтобы "применить XSL к данным и получить XML", то это и есть правильное решение.

Сценарий 2: Опечатка в расширении (XLS/XLSX вместо XSL)

Очень часто, особенно в переписке или при постановке задач от пользователей, возникает путаница в аббревиатурах. XSL и XLS (формат Microsoft Excel 97-2003) состоят из одних и тех же букв. Вероятность того, что автору вопроса нужно перегнать данные из Excel в XML, крайне высока.

Если мы предположим, что исходный файл — это таблица Excel (XLS или XLSX), то задача "преобразовать в XML" обретает совершенно иной, прикладной смысл. Рассмотрим способы решения этой задачи средствами 1С.

Способ А: Чтение через COM-объект Excel

Это классический метод интеграции. Мы открываем Excel-файл, считываем ячейки и записываем их структуру в XML-файл с помощью объекта ЗаписьXML.

Разберем алгоритм по шагам:


// Инициализируем Excel
Эксель = Новый COMОбъект("Excel.Application");
Книга = Эксель.WorkBooks.Open("C:\Data\table.xls");
Лист = Книга.WorkSheets(1);

// Подготавливаем запись XML
ЗаписьXML = Новый ЗаписьXML;
ЗаписьXML.ОткрытьФайл("C:\Data\from_excel.xml");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("ДанныеИзExcel");

// Определяем количество строк
ВсегоСтрок = Лист.Cells.SpecialCells(11).Row;

Для НомерСтроки = 1 По ВсегоСтрок Цикл
    
    ЗаписьXML.ЗаписатьНачалоЭлемента("Строка");
    
    // Считываем значения колонок
    ЗначениеА = Лист.Cells(НомерСтроки, 1).Value;
    ЗначениеБ = Лист.Cells(НомерСтроки, 2).Value;
    
    // Записываем в XML
    ЗаписьXML.ЗаписатьАтрибут("Колонка1", Строка(ЗначениеА));
    ЗаписьXML.ЗаписатьАтрибут("Колонка2", Строка(ЗначениеБ));
    
    ЗаписьXML.ЗаписатьКонецЭлемента(); // Строка
    
КонецЦикла;

ЗаписьXML.ЗаписатьКонецЭлемента(); // ДанныеИзExcel
ЗаписьXML.Закрыть();

// Закрываем Excel
Книга.Close(0);
Эксель.Quit();

Способ Б: Сохранение из самого Excel

Если задача разовая и не требует автоматизации через 1С, проще всего воспользоваться встроенными возможностями табличного редактора. Проанализируем действия пользователя:

  1. Откройте файл в Microsoft Excel.
  2. Выберите меню Файл — Сохранить как.
  3. В выпадающем списке типов файлов выберите XML-данные (*.xml) или Таблица XML 2003 (*.xml).
  4. Нажмите "Сохранить".

Excel либо создаст свою структуру (схему), либо предложит использовать существующую карту XML, если она была настроена.

Сценарий 3: Путаница с MXL (формат 1С)

Еще один вариант опечатки, специфичный для мира 1С — это путаница между XML и MXL. MXL — это внутренний формат табличных документов 1С (печатных форм).

Если задача звучит как "сохранить печатную форму в XML", то это, по сути, не конвертация, а сериализация табличного документа. Однако, чаще всего пользователи хотят сохранить MXL именно как Excel (XLS) или PDF. Тем не менее, 1С позволяет сохранять табличные документы в разных форматах.

Посмотрим, как это делается программно:


ТабДок = Новый ТабличныйДокумент;
// ... (здесь происходит заполнение табличного документа или загрузка из mxl) ...
ТабДок.Прочитать("C:\Reports\report.mxl");

// Сохранение в формат, совместимый с Excel (XLSX)
ТабДок.Записать("C:\Reports\report.xlsx", ТипФайлаТабличногоДокумента.XLSX);

// Если все же нужен именно чистый XML (редкий кейс, обычно используется формат HTML или Excel)
// Можно использовать тип HTML, который близок к XML по структуре
ТабДок.Записать("C:\Reports\report.html", ТипФайлаТабличногоДокумента.HTML);

Резюме

Подведем итоги. Когда вы сталкиваетесь с задачей "XSL в XML", прежде всего необходимо уточнить контекст, так как прямого смысла (кроме переименования файла) эта фраза не несет. Рассмотрим алгоритм действий при получении такой задачи:

  1. Проверьте расширение и содержимое. Убедитесь, что речь не идет об Excel-файле (XLS). Если это Excel — используйте методы чтения COM-объекта или штатное сохранение.
  2. Уточните, нужна ли трансформация. Если у вас есть XML с данными и XSL со стилями, используйте объект ПреобразованиеXSL в 1С для генерации итогового документа.
  3. Проанализируйте синтаксис. Если нужно просто валидировать XSL как XML, используйте любые XML-валидаторы — XSL синтаксически корректен по определению.

Правильная постановка вопроса — это половина решения. В большинстве случаев за "XSL в XML" скрывается либо опечатка в трех буквах расширения файла, либо потребность в XSLT-преобразовании данных.

← На главную