Вопрос преобразования одного формата данных в другой — классическая задача при интеграции систем. Однако формулировка "преобразовать XSL в XML" часто вызывает недоумение у опытных специалистов, так как содержит в себе либо терминологическую неточность, либо банальную опечатку. В этой статье мы подробно разберем все возможные смыслы этого запроса, проанализируем структуру файлов и рассмотрим, как решать подобные задачи в контексте платформы 1С:Предприятие.
Для начала разберемся с теорией, чтобы исключить концептуальные ошибки. Как верно было подмечено в обсуждении, сама постановка вопроса может быть двоякой.
XSL (eXtensible Stylesheet Language) — это язык, предназначенный для обработки и трансформации XML-документов. Чаще всего, говоря об XSL, мы подразумеваем XSLT (XSL Transformations).
XML (eXtensible Markup Language) — это расширяемый язык разметки, используемый для хранения и передачи структурированных данных.
Важно понимать фундаментальный факт: XSL-файл сам по себе является валидным XML-документом. Он следует всем правилам синтаксиса XML: имеет корневой элемент, иерархию тегов, атрибуты и т.д. Если открыть файл с расширением .xsl в любом текстовом редакторе или браузере, мы увидим структуру XML.
Поэтому, если ваша задача звучит буквально "сделать из XSL файла XML файл", то решение элементарно:
.xsl на .xml.С точки зрения файловой системы и парсеров, содержимое не изменится, и файл будет читаться как корректный XML. Однако практическая польза от такого действия стремится к нулю, если мы не понимаем контекст. Рассмотрим реальные сценарии, которые могут скрываться за этим вопросом.
Наиболее вероятный технический смысл вопроса — это выполнение XSLT-преобразования. В этом случае XSL выступает не как исходный материал для конвертации, а как инструмент (инструкция), с помощью которого один XML превращается в другой 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", то это и есть правильное решение.
Очень часто, особенно в переписке или при постановке задач от пользователей, возникает путаница в аббревиатурах. XSL и XLS (формат Microsoft Excel 97-2003) состоят из одних и тех же букв. Вероятность того, что автору вопроса нужно перегнать данные из Excel в XML, крайне высока.
Если мы предположим, что исходный файл — это таблица Excel (XLS или XLSX), то задача "преобразовать в XML" обретает совершенно иной, прикладной смысл. Рассмотрим способы решения этой задачи средствами 1С.
Это классический метод интеграции. Мы открываем 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();
Если задача разовая и не требует автоматизации через 1С, проще всего воспользоваться встроенными возможностями табличного редактора. Проанализируем действия пользователя:
Excel либо создаст свою структуру (схему), либо предложит использовать существующую карту XML, если она была настроена.
Еще один вариант опечатки, специфичный для мира 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", прежде всего необходимо уточнить контекст, так как прямого смысла (кроме переименования файла) эта фраза не несет. Рассмотрим алгоритм действий при получении такой задачи:
ПреобразованиеXSL в 1С для генерации итогового документа.Правильная постановка вопроса — это половина решения. В большинстве случаев за "XSL в XML" скрывается либо опечатка в трех буквах расширения файла, либо потребность в XSLT-преобразовании данных.