Перейти к содержимому

Конвертировать XML в Excel

Превратите XML-выгрузки, фиды и файлы данных в оформленный лист Excel — повторяющиеся записи найдутся сами, атрибуты и вложенные элементы разложатся по столбцам, и ничего не сохраняется.

  • Не сохраняется
  • Без очереди и ожидания
  • Без регистрации и водяных знаков

Как это работает

1

Добавьте XML

Перетащите файл .xml или вставьте XML. Файлы Excel в формате XML Spreadsheet 2003 тоже подходят.

2

Выберите записи

Повторяющийся элемент — product, item, row — выбирается автоматически; все остальные таблицы файла перечислены рядом, а предпросмотр обновляется вживую.

3

Скачайте

Файл .xlsx, где у каждого столбца свой тип для чисел и дат, а строка заголовков выделена жирным и поддерживает фильтры.

Как найти строки в дереве

В XML нет понятия таблицы, поэтому сначала нужно определить, какие элементы являются записями. Надёжный признак — повторение: родительский элемент со множеством дочерних элементов с одинаковым именем почти всегда означает список записей, а их собственные дочерние элементы и атрибуты становятся столбцами. Это работает для подавляющего большинства XML с данными — выгрузок, фидов, ответов API, дампов конфигурации, — потому что все они устроены одинаково.

И атрибуты, и дочерние элементы превращаются в столбцы. Без этого не обойтись: в XML одно и то же можно записать двумя способами, и разные системы выбирают по-разному. Одна выгрузка пишет id="42" как атрибут, другая — <id>42</id> как элемент, третья делает и то и другое в одном документе. Таблице эта разница безразлична, и вам тоже не должна быть важна, поэтому оба варианта становятся столбцами, а атрибуты помечаются, чтобы одинаковое имя в двух формах не вызывало конфликта.

Вложенность глубже одного уровня разворачивается объединением имён элементов — так же, как во вложенном JSON. Если запись содержит повторяющийся дочерний элемент — три позиции в одном заказе, — таблица не может показать его строками, не дублируя всё вокруг, поэтому повторяющиеся значения остаются в своей ячейке. Пространства имён убираются из названий столбцов, потому что столбец ns2:customerName никому в таблице не поможет, а сами значения не меняются.

В текстовом XML нет таблицы, и конвертируется он плохо. Страница XHTML, статья DocBook, глава ePub или рисунок SVG — это документ, а не набор данных: его структура вложенная и нерегулярная по своей природе, и в нём нет повторяющейся записи, из которой можно собрать строки. Конвертация что-то выдаст, но пользы от этого не будет. Эта страница — для XML с данными, и понимание этой разницы экономит больше времени, чем любая настройка.

Если нужно другое

Если вы знаете структуру, извлекайте данные осознанно, а не полагайтесь на догадки. xmlstarlet sel -t -m "//order" -v "@id" -o "," -v "customer" -n data.xml достаёт ровно нужные поля с помощью выражения XPath, а xq делает то же самое с синтаксисом в стиле jq. В этом и разница между конвертацией, которая сработала по счастливой случайности, и той, которую можно встроить в конвейер.

Для очень больших файлов здесь всё устроено неподходяще: документ целиком разбирается в памяти, а XML, разобранный в дерево, обычно занимает в несколько раз больше места, чем сам файл. Потоковые парсеры — iterparse в Python или SAX в любом языке — обходят документ в несколько гигабайт с постоянным расходом памяти, и после нескольких сотен мегабайт это единственный реальный подход.

Частые вопросы

Как инструмент понимает, какая часть XML — таблица?

Записи — это элементы, которые повторяются внутри одного родителя: каждый <book> в <catalog>, каждый <item> в RSS-канале. Каждая такая группа получает оценку по числу записей и полей, лучшая выбирается, а остальные доступны в один клик.

Что происходит с атрибутами и вложенными элементами?

Каждый становится столбцом, названным по своему пути: атрибут id становится столбцом id, <author><name> — столбцом author/name, а <price currency="EUR"> даёт столбцы price и price/@currency. Поле, которое повторяется внутри одной записи, объединяется в одну ячейку или раскладывается по пронумерованным столбцам.

Можно ли открыть файлы Excel XML Spreadsheet 2003?

Да. Такие файлы распознаются и конвертируются лист за листом, числа, даты и текст сохраняются без изменений.

А если в файле несколько таблиц — например, заказы и их позиции?

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

Мой файл где-нибудь сохраняется?

Нет. XML разбирается и книга создаётся прямо здесь, ничего не сохраняется.

Безопасно ли открывать XML из неизвестного источника?

Да. Файл читает XML-парсер вашего браузера, который никогда не загружает внешние сущности и DTD и не может ничего запустить из файла.

Полезно знать: Документы, в которых не данные, а связный текст, — страницы XHTML, статьи DocBook — не содержат таблицы и конвертируются плохо. Файлы больше примерно 100 MB могут не поместиться в память браузера.

Разместите этот инструмент на своём сайте

Бесплатно для любого блога, страницы класса или справочной статьи. Вставьте один фрагмент кода — и посетители смогут пользоваться инструментом прямо на вашей странице.