CSV в XML: конвертация с настройками и конвертер

💻 IT и кодОбновлено: 13 июля 2026 г.5 мин чтения
Нужно преобразовать CSV в XML, но ручное написание тегов — ад для больших файлов. Выбираем: Python, командная строка или онлайн-сервис.
⚡ Коротко: главное
  • В 2026 году наиболее гибкий способ — скрипт на Python с библиотекой csv и xml.etree.ElementTree.
  • Для разовых задач быстрее всего онлайн-конвертер, например наш CSV в XML.
  • Edge-cases: кодировка UTF-8 BOM в CSV ломает парсинг; пустые ячейки нужно экранировать или пропускать.
  • Для TSV используйте CSV в TSV, если нужен разделитель табуляции.
  • Массивы данных в CSV (через запятую внутри поля) требуют экранирования кавычками — это не JSON.

1. Быстрый старт: конвертируем CSV в XML за 5 строк Python

Самый простой способ для программиста — использовать встроенные модули. Пример:

import csv, xml.etree.ElementTree as ET

with open('input.csv', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    root = ET.Element('data')
    for row in reader:
        record = ET.SubElement(root, 'record')
        for key, val in row.items():
            child = ET.SubElement(record, key)
            child.text = val if val else ''
    ET.ElementTree(root).write('output.xml', encoding='utf-8', xml_declaration=True)

Этот код читает CSV с заголовками, создаёт корневой элемент <data>, для каждой строки — <record>, а поля становятся дочерними тегами. Пустые значения превращаются в пустые теги. Если хотите пропускать пустые — добавьте if val.

2. Командная строка: конвертер csv2xml и другие утилиты

Для Linux/macOS есть утилита csv2xml (установка через sudo apt install csv2xml или brew install csv2xml). Использование:

csv2xml -i input.csv -o output.xml -r data -e record

Параметры:

ФлагНазначениеПример
-iвходной CSV файлinput.csv
-oвыходной XML файлoutput.xml
-rимя корневого тегаdata
-eимя тега для строкиrecord

Под капотом утилита парсит CSV и генерирует XML. Но будьте осторожны: если в CSV есть неэкранированные кавычки, может сломаться. Для Windows можно использовать PowerShell с функциями ConvertFrom-Csv и ConvertTo-Xml, но это медленнее.

3. Онлайн-конвертеры: когда нет времени на скрипты

Для разовых задач или не-программистов лучше всего наш CSV в XML: загружаешь файл, выбираешь корневой тег (по умолчанию root) и тег записи (row), настраиваешь кодировку. Результат скачиваешь или копируешь.

Альтернативы: Convertio, Online-Convert. Но у них есть ограничения по размеру (обычно до 100 МБ) и количество записей. В нашем сервисе до 1 млн строк и файлы до 500 МБ — бесплатно.

Если нужно преобразовать в CSV в JSON или CSV в XLSX — тоже есть отдельные инструменты.

Важно: при использовании онлайн-инструментов проверяйте, не загружаете ли конфиденциальные данные. Для публичных данных это безопасно.

4. Обработка подводных камней: кодировка, BOM, экранирование

Самые частые ошибки:

  • UTF-8 BOM: Если CSV сохранён с BOM (первые байты EF BB BF), Python не считывает заголовки. Решение: открывайте с параметром encoding='utf-8-sig'.
  • Разделитель не запятая: TSV (табуляция) или точка с запятой. В Python укажите delimiter=';' в csv.reader. Наш CSV в TSV может предварительно конвертировать.
  • Кавычки внутри поля: Если в CSV поле содержит запятую, оно должно быть в двойных кавычках. Например: "Smith, John". Если внутри есть кавычка — она экранируется двумя: "".
  • Пустые ячейки: В XML лучше ставить пустой тег (<field />) или <field></field>. Решение: проверка if val: child.text = val.

Для отладки выведите первые 5 строк CSV: head -5 input.csv в Linux, или Get-Content input.csv -TotalCount 5 в PowerShell. Убедитесь, что разделитель совпадает.

Гайд по конвертации CSV в XML
  1. 1
    Подготовка CSV

    Убедитесь в кодировке UTF-8, разделителе запятая, отсутствии BOM

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

    Python, csv2xml, онлайн-конвертер — зависит от объёма и частоты

  3. 3
    Настройка структуры

    Определите корневой тег, тег записи, имена дочерних тегов

  4. 4
    Конвертация

    Запустите скрипт или загрузите файл в сервис

  5. 5
    Проверка результата

    Откройте XML в браузере, проверьте валидность через xmlstarlet

5 шагов от файла до готового XML

5. Пример с цифрами: конвертируем прайс-лист в XML

Исходный CSV (prices.csv):

name,price,stock
Widget,12.99,150
Gadget,24.50,30
Doohickey,5.00,

Скрипт из первого раздела создаст:

<?xml version="1.0" encoding="utf-8"?>
<data>
  <record>
    <name>Widget</name>
    <price>12.99</price>
    <stock>150</stock>
  </record>
  <record>
    <name>Gadget</name>
    <price>24.50</price>
    <stock>30</stock>
  </record>
  <record>
    <name>Doohickey</name>
    <price>5.00</price>
    <stock/>
  </record>
</data>

Обратите внимание: для Doohickey stock пустой — тег <stock/>. Если нужно его пропустить, проверяйте if val != ''.

Если CSV имеет 1 млн строк, Python обработает их за 2-3 секунды. Для такого объёма онлайн-конвертер тоже справится.

Чеклист конвертации CSV в XML

0 из 8

6. Генерация сложного XML: вложенные элементы и атрибуты

Если структура XML предполагает вложенность (например, заказы с позициями), CSV напрямую не подходит. Придётся использовать отдельные CSV для каждого уровня и объединять в скрипте.

Пример: CSV с полем items, содержащим список в формате JSON: items="[{"sku":"A1","qty":2}]". Тогда в Python парсим его через json.loads(val) и создаём дочерние теги.

Для атрибутов (например, <item id="123">) используйте child.set('id', row['id']).

import json
# …
for row in reader:
    rec = ET.SubElement(root, 'order')
    rec.set('id', row['order_id'])
    items = json.loads(row['items'])
    for item in items:
        elem = ET.SubElement(rec, 'item')
        elem.set('sku', item['sku'])
        elem.text = str(item['qty'])

Edge-case: если JSON-строка может быть поломана, оберните в try-except.

7. Массовая конвертация: как автоматизировать папку с CSV

Если нужно конвертировать десятки файлов, используйте shell-команду с циклом:

for f in *.csv; do
  python csv2xml.py "$f" "${f%.csv}.xml"
done

Скрипт csv2xml.py:

import sys, csv, xml.etree.ElementTree as ET

infile = sys.argv[1]
outfile = sys.argv[2]

with open(infile, newline='', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    root = ET.Element('data')
    for row in reader:
        rec = ET.SubElement(root, 'record')
        for key, val in row.items():
            if val is None or val == '':
                continue
            child = ET.SubElement(rec, key)
            child.text = val
    ET.ElementTree(root).write(outfile, encoding='utf-8', xml_declaration=True)

Для проверки используйте xmlstarlet val output.xml (установить через apt/brew).

8. Альтернативные подходы: XSLT, базы данных и готовые библиотеки

XSLT умеет конвертировать XML в CSV (обычно), но не наоборот. Если нужно обратное, можно сначала XML сгенерировать из CSV через скрипт, а потом применять XSLT для трансформации — но это избыточно.

Для СУБД: импортируйте CSV в таблицу (например, через COPY в PostgreSQL), затем экспортите как XML: COPY (SELECT xmlelement(name record, xmlattributes(id), …) FROM table) TO '/tmp/out.xml';.

Готовые библиотеки: pandas (метод df.to_xml() появился в версии 1.3.0, но в 2026 уже стабилен) — удобно, если данные уже в DataFrame. Пример:

import pandas as pd
df = pd.read_csv('input.csv')
df.to_xml('output.xml', root_name='data', row_name='record')

Плюсы: гибкий формат (атрибуты, пропуск пустых). Минусы: медленнее на больших файлах (10+ млн строк).

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

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

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

Какой онлайн-конвертер CSV в XML лучший?

Лучший — тот, который даёт гибкость: наш CSV в XML поддерживает настройку корневого тега и кодировки, без ограничений по размеру. Convertio и Online-Convert тоже работают, но имеют лимиты.

Можно ли конвертировать CSV в XML через Excel?

Да, но косвенно: откройте CSV в Excel, сохраните как XML, если у вас есть схема XSD. Без схемы Excel не создаст произвольный XML. Лучше использовать специализированные инструменты.

Как конвертировать CSV в XML в PowerShell?

Используйте: Import-Csv input.csv | ConvertTo-Xml -NoTypeInformation | Out-File output.xml. Но такой XML содержит обёртки с типами. Для чистого XML придётся писать скрипт.

Что делать, если CSV содержит символы, недопустимые в XML?

Заменить или экранировать. Например, амперсанд & на &amp;. Библиотеки типа xml.etree.ElementTree делают это автоматически. Если обрабатываете вручную — замените все спецсимволы.

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

В скрипте используйте set('attr', value) для элемента. В pandas to_xml передайте attr_cols параметр (список колонок, которые станут атрибутами).

Можно ли конвертировать CSV в XML на лету через JavaScript?

Да, на клиенте с помощью PapaParse и DOMParser. Принимаете CSV, парсите, строите XML строку вручную и скачиваете как файл. Пример есть на GitHub.

Как быть с очень большими CSV (сотни мегабайт)?

Используйте потоковую обработку: читайте CSV по строкам, пишите XML по частям. В Python — csv.reader и xml.sax.saxutils для записи. Онлайн-конвертеры обычно ограничены 500 МБ.

Чем отличается CSV в XML от CSV в JSON?

XML более строгий, требует именование тегов, поддерживает атрибуты. JSON легче парсится в JavaScript. Выбор зависит от контекста. Для обмена с Web API часто нужен JSON.

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

  1. csv2xml утилита на GitHub
  2. Python xml.etree.ElementTree документация
  3. RFC 4180 для CSV
  4. Pandas to_xml

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