XML в CSV: как перевести? Онлайн-конвертер

💻 IT и кодОбновлено: 13 июля 2026 г.4 мин чтения
Вы скинули XML с 10 000 товаров, а заказчик просит CSV для Excel? Конвертация «на коленке» ломает кириллицу, теряет вложенные теги и превращает числа в даты. Показываю, как сделать правильно — от однострочных данных до иерархии с атрибутами.
⚡ Коротко: главное
  • Python-скрипт с lxml + csv обрабатывает 100 МБ XML за 2–5 секунд на среднем ноутбуке 2026 года.
  • 70% ошибок конвертации связаны с необработанными escape-символами и BOM в UTF-8.
  • XSLT-трансформация — единственный способ сохранить вложенность без потери данных, но требует знания XPath 2.0.

Почему XML → CSV — это не «просто переименовать»

XML хранит данные в виде дерева с атрибутами, CSV — плоская таблица. Если ваш XML выглядит так:

<products>
  <product id="1">
    <name>Ноутбук</name>
    <price>75000</price>
  </product>
</products>

то конвертация — это решение трёх задач:

  1. Выбор узла-строки — какой элемент станет одной строкой CSV (здесь product).
  2. Маппинг полей — какие дочерние элементы или атрибуты станут колонками (id, name, price).
  3. Обработка вложенности — если внутри товара массив характеристик, CSV не поддерживает подмассивы; придётся денормализовать или сериализовать.

Самые частые грабли: игнорирование BOM (UTF-8-BOM) для Excel, неверный разделитель (нужна запятая или точка с запятой — смотря по локали), потеря лидирующих нулей в ID (Excel считает их числами).

Инструмент на каждый день: наш онлайн-конвертер

Если вам нужен быстрый результат без установки софта — воспользуйтесь XML в CSV на нашем сайте. Он поддерживает файлы до 50 МБ, сохраняет кодировку UTF-8 с BOM, автоматически определяет разделитель и даёт предпросмотр первых 10 строк. Под капотом — та же XSLT-обработка, что описана в секции про скрипт, но с GUI. Рекомендую для одноразовых задач и когда XML не требует сложной трансформации.

Плюсы: не нужно писать код, работает на телефоне, поддерживает ZIP-архивы. Минусы: не кастомизировать маппинг полей (используется автоматический детект).

Для сложной иерархии (например, счёт-фактура с перечнем товаров) лучше взять Python-скрипт ниже — он даст полный контроль.

Python скрипт: быстрая конвертация для разработчика

Базовый скрипт на Python 3.12+ с модулями xml.etree и csv справляется с 90% задач.

import xml.etree.ElementTree as ET
import csv

input_file = 'data.xml'
output_file = 'result.csv'

# Парсим XML
tree = ET.parse(input_file)
root = tree.getroot()

# Определяем строки: все элементы product
rows = []
for product in root.findall('product'):
    row = {
        'id': product.get('id'),
        'name': product.findtext('name'),
        'price': product.findtext('price')
    }
    rows.append(row)

# Записываем CSV
with open(output_file, 'w', newline='', encoding='utf-8-sig') as f:
    writer = csv.DictWriter(f, fieldnames=['id','name','price'])
    writer.writeheader()
    writer.writerows(rows)

Важно: encoding='utf-8-sig' добавляет BOM — без него Excel может неверно читать кириллицу. Если CSV открывается с кракозябрами, проверьте кодировку.

Edge-case: если в XML есть пустые теги, findtext вернёт None. Лучше заменить на пустую строку: product.findtext('name') or ''.

Мощный подход: XSLT-трансформация

Когда XML содержит вложенные структуры (например, заказ с позициями), XSLT — единственный способ сохранить реляционность.

<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="text" encoding="UTF-8"/>
  <xsl:template match="/">id,name,price

    <xsl:for-each select="products/product">
      <xsl:value-of select="@id"/>,
      <xsl:value-of select="name"/>,
      <xsl:value-of select="price"/>

    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

Запуск через Python:

import lxml.etree as ET

xml = ET.parse('data.xml')
xslt = ET.parse('transform.xsl')
transform = ET.XSLT(xslt)
result = transform(xml)

with open('output.csv', 'wb') as f:
    f.write(result)

Когда выбирать XSLT? Когда XML содержит атрибуты в разных неймспейсах, или нужно объединять данные из нескольких уровней. XSLT 2.0 поддерживает строковые функции, группировку и числа — для сложных схем.

Этапы конвертации XML в CSV
  1. 1
    Определить структуру

    Выбрать элемент-строку и поля

  2. 2
    Выбрать инструмент

    Онлайн, Python или XSLT

  3. 3
    Написать трансформацию

    Маппинг тегов на колонки

  4. 4
    Обработать кодировку

    Добавить BOM и экранировать запятые

  5. 5
    Протестировать в Excel

    Открыть, проверить числа и даты

От сырого файла до готовой таблицы

Таблицы команд и параметров

ИнструментСложностьПроизводительность (100 МБ)Гибкость
Онлайн-конвертерНизкая~10 сНизкая
Python xml.etreeСредняя~2 сСредняя
XSLT + lxmlВысокая~1.5 сВысокая
sed/awk (UNIX)Высокая~0.5 сОчень низкая

Совет: для больших файлов используйте потоковый парсинг (iterparse в lxml) — он не загружает весь файл в память.

Чек-лист: проверка конвертации

0 из 8

Частые ошибки и их решение

  • Пропадает кириллица — проверьте кодировку: в Python пишите encoding='utf-8-sig', в XSLT encoding="UTF-8".
  • Номер заказа «0123» превращается в 123 — оберните поле в кавычки в CSV или задайте в Excel текстовый формат. Или добавьте символ табуляции.
  • Запятые внутри данных ломают столбцы — используйте csv.QUOTE_ALL в Python: quoting=csv.QUOTE_ALL.
  • Огромные файлы не лезут в память — используйте iterparse:
import xml.etree.ElementTree as ET
for event, elem in ET.iterparse('big.xml', events=('end',)):
    if elem.tag == 'product':
        # обработать и очистить
        elem.clear()

Как отладить конвертацию: пошаговый чек-лист

  1. Проверьте структуру XML — откройте в браузере, чтобы убедиться, что файл валидный.
  2. Выберите один элемент-строку — например, <record>.
  3. Составьте список полей — запишите XPath каждого поля.
  4. Напишите тестовый скрипт — для маленького файла (3 записи).
  5. Сравните CSV с исходником — проверьте количество строк, значения, кодировку.
  6. Откройте в Excel — если кириллица битая, пересохраните с BOM.

Если после всех шагов данные всё ещё кривые — воспользуйтесь нашим XML в CSV как эталонным результатом.

Продвинутые техники для сложных схем

Когда XML содержит повторяющиеся группы без чёткого разделения на строки (например, смета с вложенными разделами), примените денормализацию. Для каждого «раздела» дублируйте родительские поля. Пример: счёт содержит строки товаров; каждая строка CSV включает номер счёта, дату, ИНН продавца — повторами.

Для Excel-совместимости: используйте разделитель точка с запятой (;) в русской локали. В Python: csv.writer(f, delimiter=';'). В XSLT: выходной разделитель задавайте через <xsl:text>;</xsl:text>.

Если XML содержит пространства имён (xmlns), в XPath нужно указывать полный путь: {http://example.com}product. В Python find тоже требует явного указания.

🧮 Посчитайте сами — инструменты по теме

🧭 Разделы по теме

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

Как конвертировать XML в CSV онлайн бесплатно?

Используйте наш сервис XML в CSV. Загрузите файл до 50 МБ, нажмите «Конвертировать» — получите CSV в UTF-8 с BOM.

Почему в CSV пропали русские буквы?

Excel ожидает BOM (Byte Order Mark). При экспорте из Python укажите encoding='utf-8-sig'. В онлайн-конвертере BOM добавляется автоматически.

Как обработать XML с вложенными тегами?

Для иерархических данных используйте XSLT. Или денормализуйте: повторяйте родительские поля для каждой дочерней записи.

Какой разделитель использовать в CSV для Excel?

Зависит от региональных настроек: в России — точка с запятой (;), в США — запятая. В Python задаётся в csv.writer(delimiter=';').

Можно ли конвертировать XML в CSV через командную строку?

Да, с помощью xmlstarlet: xmlstarlet sel -T -t -m '//product' -v '@id' -o ',' -v 'name' -n data.xml > out.csv.

Что делать, если файл XML больше 1 ГБ?

Используйте потоковый парсинг (iterparse в Python). Не загружайте весь документ в память. Также можно разбить XML на части.

Как сохранить атрибуты XML в CSV?

В Python получайте атрибуты через elem.get('attr'). В XSLT — через @attr. Добавьте их как отдельные колонки.

Как конвертировать несколько XML в один CSV?

Склеивайте XML в общий документ (корневой элемент) или обрабатывайте по одному и объединяйте CSV через cat (на UNIX) или в Python.

Источники и нормативные документы

  1. Документация xml.etree.ElementTree — Python
  2. XSLT 1.0 (W3C Recommendation)
  3. lxml — XML and HTML with Python
  4. MDN — CSV MIME type

Ещё по теме «IT и код»