XML в CSV и Excel: как выгрузить без потерь
Главная развилка при конвертации XML в плоский формат — не технологическая, а смысловая: нужно решить, что считать строкой. От этого зависит и число строк, и корректность сумм.
Шаг первый: выбрать уровень
В любом сколько-нибудь сложном XML данные лежат уровнями: документ содержит записи, запись — подзаписи, подзапись — список. Плоская таблица может представить только один уровень.
Поэтому первый вопрос — какой уровень нужен именно для этой задачи. Для сверки числа случаев — один ответ, для пересчёта услуг — другой. Хороший инструмент показывает, какие элементы повторяются и сколько раз, и даёт переключиться без повторного открытия файла.
Шаг второй: решить, что делать с вложенными списками
Если внутри выбранной строки остаётся повторяющийся элемент, вариантов три:
- Склеить значения через разделитель — годится, когда элементов два-три и нужно просто видеть их в строке;
- Посчитать количество — когда важен факт и число, а не содержимое;
- Сменить уровень и сделать вложенный элемент строкой — правильный ответ, когда с этими данными предстоит работать.
Чего делать не стоит — разворачивать всё сразу в одну таблицу. Получится декартово произведение, где данные верхнего уровня дублируются, и любые итоги по ним завышаются.
Шаг третий: типы и кодировка
В XML все значения — текст. При выгрузке важно, чтобы числа стали числами, даты датами, а коды остались текстом. Особенно это касается номеров полисов и СНИЛС: превратившись в числа, они теряют ведущие нули и точность — механизм тот же, что в CSV.
Кодировка исходного XML указана в прологе, но на выгрузку это не переносится автоматически. Для CSV выбирайте UTF-8 с BOM, если файл пойдёт в Excel, и windows-1251, если его ждёт старая учётная система.
Когда нужен не просмотрщик
Если конвертация повторяется регулярно и по расписанию, разумнее автоматизировать: XSLT-преобразование или скрипт с потоковым разбором. Инструмент с интерфейсом хорош для разовой задачи и для разбирательства, а не для конвейера.
Граница проходит по повторяемости: разово посмотреть и выгрузить — интерфейс; каждую неделю одно и то же — скрипт.
Частые вопросы
Сохранятся ли атрибуты при выгрузке?
Да, они становятся отдельными колонками — с пометкой, чтобы не путать с одноимёнными вложенными элементами.
Что будет с очень длинными текстовыми значениями?
В CSV и XLSX они выгружаются целиком. Ограничение возникает только при выгрузке в DBF — там длинный текст уходит в memo.
Можно ли выгрузить сразу несколько уровней?
Отдельными файлами — да: переключите уровень и выгрузите ещё раз. В одну таблицу их сводить не стоит.