Конвертировать XML в Excel
Преобразуйте XML-ленты и выгрузки из систем в таблицу: повторяющийся элемент записи ищется автоматически, атрибуты становятся отдельными столбцами.
Перетащите файлы сюда
.xml, .rss, .xhtml, .txt · до 300 МБ
Больше настроекМеньше настроек
Как конвертировать
- 1
Перетащите XML-файл
Ленты, каталоги и выгрузки из систем обрабатываются только локально. Подходят RSS, обычный XML и XHTML.
- 2
Подтвердите найденный элемент записи
Самый часто повторяющийся путь становится строкой. Переопределите его, если записи в вашем файле вложены нестандартно.
- 3
Конвертируйте и скачайте XLSX
Вы получаете по одной строке на запись с закрепленным заголовком. Таблицу сразу можно фильтровать и сортировать.
Как определить, что считать строкой
В XML нет понятия таблицы, поэтому главный вопрос — какой элемент считать записью. Дерево документа проходится целиком, и для каждого узла считается количество одноименных дочерних элементов. Побеждает путь с наибольшим числом повторений. Если есть несколько вариантов с одинаковым счетчиком, выбирается более глубокий путь, потому что он конкретнее: rss.channel.item — куда более полезный ответ, чем rss.channel. Этот подход почти всегда правильно срабатывает на лентах и каталогах, но это все равно только эвристика. Поэтому путь выводится в редактируемое поле, а не прячется как внутренняя настройка. Выгрузка из 1С, где повторяются и Document, и TableRow, — тот случай, когда только вы знаете, что считать записью.
Атрибуты, пространства имен и вложенность
Атрибут несет данные так же, как и элемент, поэтому id="7" превращается в столбец с именем @id, а вложенный currency="EUR" — в sum.@currency. При желании измените префикс или полностью исключите атрибуты. Префиксы пространств имен по умолчанию удаляются, чтобы dc:title попал в столбец с именем title — этого обычно и ждут, когда открывают лист. Если отключить эту опцию, префикс в имени останется. Вложенные элементы разворачиваются в столбцы с именами через точку до указанной вами глубины. Все, что глубже, записывается как компактная JSON-строка в одной ячейке, а не раздувает таблицу вширь.
Объявления сущностей отклоняются, а не разворачиваются
XML-файл может объявлять свои сущности внутри DOCTYPE, а их разворачивание — тот самый механизм, которым атака billion laughs съедает память, а XXE читает файлы с сервера. Безопасного способа разворачивать недоверенные сущности нет, а для конвертации в таблицу это и не нужно. Поэтому документ с объявлением ENTITY отклоняется еще до парсинга, с сообщением, в котором прямо сказано, в чем причина. Удалите DOCTYPE, и остальная часть файла будет конвертирована как обычно.
Разбор здесь, а не на сервере
Разбор, проверка и конвертация выполняются в этой вкладке браузера с помощью отдельного парсера, написанного под эту задачу. Файл никуда не загружается, а отказ разворачивать внешние сущности гарантирует, что никакая его часть не сможет обратиться наружу.
Частые вопросы
Как выбирается повторяющийся элемент?
По числу одноименных соседей во всем документе выбирается путь с наибольшим количеством таких элементов, при равенстве — более глубокий путь. Найденный путь показывается и его можно заменить на любой, который вы введете.
Куда попадают атрибуты?
В отдельные столбцы с префиксом @ по умолчанию — например, @id для атрибута записи и sum.@currency для атрибута на вложенном элементе. Префикс можно изменить или полностью отключить атрибуты.
Что происходит с вложенными элементами?
Они превращаются в столбцы с именами через точку, например order.customer.city, до заданной вами глубины. Все, что глубже, записывается как компактная JSON-строка в одну ячейку, а не разносится по новым столбцам.
Что с пространствами имен?
Префиксы вроде dc: по умолчанию убираются, поэтому dc:title становится столбцом с именем title. Если в вашем файле разные пространства имен используют одинаковые локальные имена, отключите удаление префиксов, чтобы не смешивать их.
Работает ли с RSS?
Да, для детектора это самый простой случай: rss.channel.item находится автоматически. Вы получаете по одной строке на запись ленты, с title, link и pubDate в столбцах.
Какой лимит строк?
1 048 576 строк — это ограничение самого формата XLSX. Более длинная лента отклоняется с предложением перейти в конвертер CSV, где такого ограничения нет.
Мой файл загружается на сервер?
Нет. Файл декодируется, разбирается и конвертируется в вашем браузере, а объявленные сущности сразу отклоняются, а не разворачиваются. Поэтому ничего в документе не может инициировать сетевой запрос.