CSV в XML: конвертация с настройками и конвертер
- В 2026 году наиболее гибкий способ — скрипт на Python с библиотекой csv и xml.etree.ElementTree.
- Для разовых задач быстрее всего онлайн-конвертер, например наш CSV в XML.
- Edge-cases: кодировка UTF-8 BOM в CSV ломает парсинг; пустые ячейки нужно экранировать или пропускать.
- Для TSV используйте CSV в TSV, если нужен разделитель табуляции.
- Массивы данных в CSV (через запятую внутри поля) требуют экранирования кавычками — это не JSON.
- 1. Быстрый старт: конвертируем CSV в XML за 5 строк Python
- 2. Командная строка: конвертер csv2xml и другие утилиты
- 3. Онлайн-конвертеры: когда нет времени на скрипты
- 4. Обработка подводных камней: кодировка, BOM, экранирование
- 5. Пример с цифрами: конвертируем прайс-лист в XML
- 6. Генерация сложного XML: вложенные элементы и атрибуты
- 7. Массовая конвертация: как автоматизировать папку с CSV
- 8. Альтернативные подходы: XSLT, базы данных и готовые библиотеки
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. Убедитесь, что разделитель совпадает.
- 1Подготовка CSV
Убедитесь в кодировке UTF-8, разделителе запятая, отсутствии BOM
- 2Выбор инструмента
Python, csv2xml, онлайн-конвертер — зависит от объёма и частоты
- 3Настройка структуры
Определите корневой тег, тег записи, имена дочерних тегов
- 4Конвертация
Запустите скрипт или загрузите файл в сервис
- 5Проверка результата
Откройте XML в браузере, проверьте валидность через xmlstarlet
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?
Заменить или экранировать. Например, амперсанд & на &. Библиотеки типа 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.
Источники и нормативные документы
- csv2xml утилита на GitHub
- Python xml.etree.ElementTree документация
- RFC 4180 для CSV
- Pandas to_xml