Хотя JSON популярен для работы с веб-сервисами, сферы финансов и здравоохранения по-прежнему опираются на XML. Поэтому умение преобразовывать SQL в XML и наоборот станет вашим ценным навыком.
В этом подробном руководстве вы погрузитесь в тонкости работы с XML и SQL с помощью возможностей n8n, инструмента автоматизации рабочих процессов. Вы познакомитесь со следующими этапами:
- Экспорт данных SQL в формат XML;
- Импорт XML-файла обратно в таблицу SQL;
- Способы представления XML-файла;
- Представление XML-данных в визуально привлекательном виде.
Цель этого руководства — предоставить единый подход к преобразованию данных SQL в XML. Для этого не нужно будет использовать синтаксис SQL.
Что такое n8n?
Это доступная платформа автоматизации рабочих процессов с закрытым исходным кодом для технических специалистов, которым важна скорость разработки. Инструмент позволяет делать любые интеграции с помощью сотен выделенных узлов или настраивать пользовательский HTTP-запрос.
Что такое XML?
XML, или расширяемый язык разметки (eXtensible Markup Language), — это широко используемый формат для обмена информацией между различными платформами. XML обладает высокой адаптивностью, что позволяет легко расширять его.
Одно из многочисленных преимуществ XML заключается в том , что он является как человекочитаемым, так и машиночитаемым. Хотя более новый формат JSON получил широкое распространение в веб-разработке, XML по-прежнему используется в корпоративных платформах. Он нужен для передачи данных в регулируемых отраслях. Вот пример очень простого XML-файла:
<?xml version="1.0" encoding="UTF-8"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
Как преобразовать SQL в XML?
Движки SQL предоставляют собственные способы экспорта SQL в XML. Например:
- MS SQL Server имеет специальное положение FOR XML AUTO.
- PostgreSQL использует другой подход с помощью нескольких XML-функций.
- Наконец, MySQL имеет специальную опцию в команде mysqldump CLI для экспорта всей базы данных SQL или определенных таблиц в формат XML.
Как видите, каждый механизм SQL использует собственный способ экспорта в XML. Правда, было бы здорово, если бы существовал единый инструмент конвертации? Еще бы он работал со всеми типами данных SQL… К счастью, такой инструмент существует.
С n8n вам больше не придется разбираться с отдельными интерфейсами SQL и конвертерами XML. Вместо этого вы получите всеобъемлющую платформу, которая объединяет в себе и то, и другое.
Как экспортировать SQL в XML с помощью n8n?
Этот простой сценарий создает 2 XML-файла: с атрибутами XML и без них
Давайте рассмотрим сценарий для экспорта таблиц SQL в формат XML.
Шаг 1. Извлеките данные из SQL
Существует узел SQL, который извлекает 16 случайных записей из базы данных. Если у вас уже есть данные на языке SQL, используйте соответствующий узел (n8n поддерживает различные SQL-движки через специальные узлы).
💡 Вы также можете прочитать статью «Как сравнивать базы данных через Compare Datasets». Там вы получите подробные инструкции по созданию бесплатной учетной записи MySQL и импорту базы данных образца.
Таблица Products содержит информацию об игрушечных автомобилях
После настройки подключения к базе данных получите несколько записей с помощью следующего SQL-запроса:
SELECT * from products
ORDER BY RAND()
LIMIT 16;
Шаг 2. Создайте простой XML-файл из таблицы SQL
Теперь давайте создадим простой XML-файл из этих данных. Добавим узел Set и определим несколько строковых переменных, как показано на скриншоте.
Определите структуру будущего XML-файла в узле Set
Чтобы обратиться к вложенным элементам объектов, в ключах можно использовать точку. Например, имя Product.Code означает, что сначала будет создан JSON-ключ Product, а затем в качестве дочернего будет создан ключ Code.
Обратите внимание на структуру JSON в правой части скриншота.
Далее узел ItemLists используется для создания массива элементов.
Объедините элементы в один массив, если хотите получить их все в одном XML-выводе
Почему это необходимо?
Если пропустить этот шаг, в узле XML будет создано 16 XML-файлов с одним элементом. Если вы хотите получить все 16 элементов в одном файле, то их необходимо объединить.
💡 Обратите внимание, что правильный XML-файл должен иметь корневой элемент. Именно поэтому мы написали Products в опции Put Output in Field. Таким образом, у нас будет корневой элемент Products, затем несколько записей Product, каждая из которых содержит элементы Code, Name, Line, Scale и Price.
На этом предварительная обработка заканчивается, теперь мы можем сгенерировать XML-файл с помощью узла XML.
Объекты JSON легко преобразуются в XML и наоборот
Узел XML генерирует текстовую строку и сохраняет ее в ключе data. Нам остается использовать узлы Move Binary Data и Write Binary File для создания нового XML-файла на сервере. Вот как выглядит конечный результат:
Пример простого экспорта SQL в XML
Шаг 3. Создайте XML-файл с атрибутами
Теперь, когда мы разобрали, как экспортировать SQL в простой XML-файл, давайте погрузимся немного глубже. Рассмотрим, как создавать XML-файлы с атрибутами. Сторонней системе могут понадобиться атрибуты XML, поэтому важно знать, как их создавать в n8n.
В принципе, преобразование таблицы SQL в XML с атрибутами выполняется в n8n точно так же. Есть только два небольших изменения.
Во-первых, требуется специальный ключ $ (знак доллара). Он определяет, какие ключи JSON преобразуются в атрибуты XML. Давайте рассмотрим узел Set:
Используйте ключ $ для определения атрибутов XML
В этом примере JSON-ключ Product имеет три дочерних ключа: Name, Line и Scale. У него также есть ключ $ с двумя дочерними ключами: Price и Code. Эти два JSON-ключа станут атрибутами ключа Product.
Для этого в узле XML добавьте еще один параметр Attribute Key и убедитесь, что он имеет то же значение со знаком доллара:
Добавьте опцию Attribute Key в настройках узла XML
После того как вы создали и сохранили новый XML-файл, откройте его в текстовом редакторе. Можно увидеть, что Price и Code теперь являются атрибутами элемента Product, а не отдельными элементами.
Пример XML-файла с атрибутами
Таким образом, используя всего три узла: Set, ItemLists и XML, вы можете определить XML-структуру практически любой сложности и сгенерировать XML-файл. Это позволяет экспортировать данные SQL практически из любого SQL-движка, поддерживаемого n8n.
Как импортировать XML в SQL с помощью n8n?
Мы подробно рассмотрели, как создать XML-файл из базы данных SQL. Но можно поставить и обратную задачу — добавить XML-данные обратно в SQL.
Воспользуемся уже имеющимся XML-файлом и разберемся, как импортировать его в базу данных SQL.
Импорт XML-файла в таблицу SQL тоже достаточно прост
Шаг 1. Получите XML-файл
Сначала считываем двоичный файл, который был сохранен на сервере. В вашем случае этот XML-файл может быть получен из внешней системы или загружен из облачного хранилища.
Далее нужно преобразовать двоичные данные в JSON. Это делается в три этапа.
В узле Code есть небольшой JS-скрипт, который считывает буфер двоичных данных и преобразует содержимое XML-файла в строковую переменную:
let binaryDataBufferItem = await this.helpers.getBinaryDataBuffer(0, 'data');
var data = binaryDataBufferItem.toString('utf8')
return {"data": data};
Шаг 2. Подготовьте данные XML к импорту
В узле XML выберите режим преобразования XML в JSON.
Узел XML способен преобразовывать JSON в XML, а также XML в JSON
Этот узел поможет нам преобразовать XML в SQL. У него есть несколько полезных опций, но сейчас нас интересует Attribute Key. Выберите эту опцию и активируйте тумблер Merge Attributes. Если у вас есть XML-файл с еще более сложной структурой, вы можете поэкспериментировать с другими опциями, чтобы получить более читабельный результат.
Наконец, перед тем как импортировать данные в SQL, нам нужно разделить элементы массива. В узле ItemLists выберите операцию Split Out Items и введите Products.Product в опции Fields.
XML-файл преобразуется в формат JSON
Полученный результат представляет собой сглаженный JSON-объект, который поможет нам в процессе импорта.
Перед импортом данных давайте создадим новую пустую таблицу с той же структурой, что и таблица Products. В примере уже есть узел SQL, который выполняет два оператора SQL:
CREATE TABLE IF NOT EXISTS new_table AS SELECT * FROM products;
TRUNCATE new_table;
- Первое утверждение не требует пояснений. Создается новая таблица, в которой хранятся все переменные и данные из таблицы Products.
- Оператор TRUNCATE удаляет все данные из new_table, сохраняя структуру таблицы.
Шаг 3. Импортируйте записи в таблицу SQL
Теперь мы готовы импортировать XML-данные в таблицу SQL. Перейдите к настройкам последнего узла SQL и настройте его:
- Выберите операцию Insert.
- Выберите new_table из выпадающего списка.
- Если ключи JSON точно совпадают с именами переменных SQL, можете выбрать Auto-Map Input Data to Columns. В другом случае используйте ручной выбор и укажите все переменные для импорта.
Переменные могут быть импортированы в SQL автоматически, или их можно выбрать по отдельности
💡 Не забывайте, что база данных SQL может иметь дополнительные ограничения на переменные. Например, допускаются только не пропущенные значения или должны выполняться другие условия. Если процесс импорта по какой-то причине не удался, вы можете найти подробное описание ошибки и соответствующим образом скорректировать процесс импорта.
Как передать XML-файл?
Теперь, когда вы узнали, как экспортировать таблицу SQL в файл XML и преобразовывать XML обратно в таблицу SQL, давайте немного вернемся назад.
До сих пор мы показывали только, как сохранить XML-файл на сервере. Однако вы можете захотеть отправить этот файл дальше. В n8n есть множество способов сделать это:
- С помощью узла Send Email вы можете отправить XML-файл старым добрым способом. Это пригодится, если получателю нужно вручную загрузить данные в какую-то систему.
- XML-файл можно сохранить на удаленном компьютере с помощью узла FTP.
- Если вы используете хранилище S3, вам понадобится специальный узел.
- С помощью узла HTTP Request вы можете загрузить XML-файл непосредственно в стороннюю систему.
Как визуализировать XML-файл?
Если предполагается, что получатель будет просматривать XML-файл, можно облегчить этот процесс и отформатировать XML-вывод в удобном для чтения виде. Рассказываем, как это сделать исключительно с помощью шаблона XSL.
Опытные разработчики знают, что XML — это долгоживущий формат, вокруг которого построено несколько вспомогательных технологий. Одна из них называется XSXSLT — язык шаблонов для XML.
И XML, и XSLT являются стандартами W3C. Это значит, что они поддерживаются большинством браузеров. Поэтому вы можете просто передать XML-файл со ссылкой на XSL-шаблон, а браузер сделает все остальное. Показываем пример:
Этот XML доставляется через вебхук n8n. Обратите внимание на вторую строку, которая содержит ссылку на файл шаблона XSL
Вебхук отдает тот же XML-файл, который мы создали в предыдущей части руководства. Единственное отличие — дополнительная ссылка на таблицу стилей XSL.
Если такой XML-файл открыть в браузере, он будет преобразован в красиво оформленную страницу:
Вот как может выглядеть стилизованный XML-файл
Ключевой компонент этого процесса — файл шаблона XSL. Он использует язык стилей для XML, который анализирует элементы XML и отображает их значения на HTML-странице. Так все правила сопоставления уже предоставлены, добавлена ссылка на шаблон bootstrap 5 и готов небольшой JS-сниппет для всплывающих окон.
Вы можете самостоятельно изучить пример рабочего процесса, настроить учетные данные базы данных и URL вебхука. Обратите внимание, что XSL-шаблон будет работать только с базой данных примера. Если у вас другие данные, пожалуйста, обновите XSL-шаблон соответствующим образом. После настройки вы можете ввести этот URL в браузер и получить красиво отформатированную страницу.
Этот сценарий извлекает случайные записи из таблицы SQL, преобразует их в XML и отправляет обратно вместе со ссылкой на XSL-шаблон
Это руководство можно использовать как отправную точку для создания более сложных сценариев:
- Используйте другие узлы и создавайте XML-файлы из различных SQL-баз данных, таких как Snowflake, MongoDB или MS SQL Server.
- Чтобы работать с другими форматами, вы также можете легко экспортировать и импортировать CSV-файлы в MySQL.
Зерокодинг, инструментом которого является n8n значительно ускоряет работу и делает ее эффективнее. Он охватывает разные сферы IT и помогает в развитии бизнеса и карьеры.