ToolDeck

CSV to XML

Конвертация CSV-данных в формат XML

Попробовать пример

Входные данные CSV

Результат XML

Работает локально · Безопасно вставлять секреты
Результат XML появится здесь…

Что такое конвертация CSV в XML?

Конвертация CSV в XML преобразует значения, разделённые запятыми, в документы на языке Extensible Markup Language (XML). Каждая строка CSV становится XML-элементом, а каждый заголовок столбца отображается в имя дочернего тега. Результат — иерархический самоописывающий документ, который системы могут проверять по схеме (XSD или DTD) и обрабатывать стандартными XML-инструментами: XSLT, XPath, а также SAX/DOM-парсерами.

XML является стандартом обмена данными с 1998 года, когда W3C опубликовал спецификацию XML 1.0. Хотя JSON вытеснил XML во многих веб-API, XML по-прежнему остаётся обязательным форматом для SOAP-сервисов, лент RSS/Atom, графики SVG, документов Office Open XML (.docx, .xlsx), ресурсных файлов Android, конфигураций сборки Maven/Gradle, а также в регулируемых отраслях: здравоохранении (HL7 CDA), финансах (FpML, XBRL) и государственном секторе (NIEM). Когда исходные данные — электронная таблица или экспорт из базы данных, конвертация CSV в XML позволяет загрузить их в эти системы.

Полноценный конвертер CSV в XML должен обрабатывать граничные случаи RFC 4180: поля в кавычках, содержащие запятые или переносы строк, экранированные двойные кавычки и нестандартные разделители. На стороне XML он обязан экранировать пять предопределённых XML-сущностей (& < > " '), формировать допустимые имена элементов из заголовков (заменяя пробелы и недопустимые символы) и создавать корректно оформленный вывод с объявлением XML и единой кодировкой.

Зачем использовать конвертер CSV в XML?

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

Мгновенная конвертация в браузере
Вставьте CSV и сразу получите корректный XML-вывод с объявлением, корневым элементом и вложенными дочерними элементами. Не нужно устанавливать утилиты командной строки или библиотеки.
🔒
Данные остаются у вас
Вся конвертация выполняется локально в браузере с помощью JavaScript. Ваши CSV-данные никогда не отправляются на сервер, не записываются в журналы и не сохраняются за пределами вашего устройства.
🎯
Корректный и правильно оформленный XML
Вывод экранирует XML-сущности, приводит заголовки к допустимым именам элементов и создаёт правильно вложенную разметку, которая пройдёт проверку любым XML-валидатором или линтером.
📋
Поддержка любого диалекта CSV
Автоматически определяет запятые, точки с запятой, табуляции и вертикальные черты в качестве разделителей. Поддерживает правила экранирования RFC 4180, включая двойные кавычки, многострочные поля и UTF-8-файлы с BOM.

Сценарии использования CSV to XML

Интеграция с SOAP и унаследованными API
Многие корпоративные системы по-прежнему используют SOAP-сервисы, требующие XML-тело запроса. Преобразуйте экспорт CSV в XML-пейлоады, соответствующие WSDL-схеме сервиса, перед отправкой запросов.
Генерация файлов конфигурации сборки
Создавайте списки зависимостей Maven pom.xml, ресурсные файлы Android или определения Spring bean из таблицы с зависимостями, строками или записями конфигурации. Пакетно формируйте XML-конфигурации из единого CSV-источника.
ETL в пайплайнах обработки данных
Подавайте CSV-экспорты из баз данных или аналитических инструментов в ETL-пайплайны на основе XML. Такие инструменты, как Apache NiFi, Talend и SSIS, принимают XML-входные данные для трансформационных рабочих процессов с проверкой схемы на каждом этапе.
Регуляторная и комплаенс-отчётность
В здравоохранении (HL7 CDA), финансах (XBRL, FpML) и государственном секторе (NIEM) XML является обязательным форматом для подачи отчётности. Преобразуйте табличные данные о соответствии требованиям в нужную XML-структуру перед отправкой.
Генерация лент RSS и Atom
Превратите CSV-список статей, заголовков и дат в ленту RSS 2.0 или Atom. Рабочие процессы управления контентом нередко начинаются с таблицы публикаций, которую нужно оформить как ленту синдикации.
Изучение основ XML
Студенты, изучающие XML, могут вставить знакомые CSV-данные и увидеть получившуюся иерархию элементов, вложенность и экранирование сущностей. Сравнение входных и выходных данных делает абстрактные понятия корректности и валидности XML наглядными.

Справочник по отображению CSV в XML

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

Понятие CSVЭквивалент XMLДетали
CSV fileXML documentThe entire file maps to a root element containing all records
Header rowElement tag namesEach column header becomes the tag name for child elements
Data row<row> elementEach row becomes a repeating child element of the root
Cell valueText nodeCell content becomes the text inside the corresponding tag
Empty cellEmpty element or omittedCan be rendered as <field/> or excluded from output
Comma delimiterXML structureDelimiters are replaced by element nesting and closing tags

CSV и XML: сравнение

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

CSV
Обычный текст, одна запись в строке. Без типов данных: каждое значение является строкой. Без иерархии и вложенности. Минимальный размер файла. Поддерживается повсеместно: электронными таблицами, базами данных и языками сценариев. Определён в RFC 4180. Оптимален для простой передачи табличных данных между системами, которые понимают структуру столбцов.
XML
Иерархическая разметка с открывающими и закрывающими тегами. Поддерживает атрибуты, пространства имён, смешанное содержимое и секции CDATA. Может проверяться по схемам XSD или DTD. Обрабатывается с помощью XSLT, XPath, SAX и DOM-парсеров. Бо́льший размер файла по сравнению с CSV из-за накладных расходов на теги. Обязателен для SOAP API, Office Open XML, RSS/Atom и многих регулируемых отраслей.

Примеры кода

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

JavaScript (browser / Node.js)
// CSV string → XML with proper escaping
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToXml(csv, rootTag = 'data', rowTag = 'row') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const xmlRows = data.map(row => {
    const fields = headers.map((h, i) => {
      const val = (row[i] || '').replace(/&/g, '&amp;')
        .replace(/</g, '&lt;').replace(/>/g, '&gt;')
      return `    <${h}>${val}</${h}>`
    }).join('\n')
    return `  <${rowTag}>\n${fields}\n  </${rowTag}>`
  }).join('\n')
  return `<?xml version="1.0" encoding="UTF-8"?>\n<${rootTag}>\n${xmlRows}\n</${rootTag}>`
}

console.log(csvToXml(csv))
// → <?xml version="1.0" encoding="UTF-8"?>
// → <data><row><name>Alice</name><age>30</age>...</row>...</data>
Python
import csv, io
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.DictReader(io.StringIO(csv_string))
root = Element('data')

for row in reader:
    row_el = SubElement(root, 'row')
    for key, value in row.items():
        child = SubElement(row_el, key)
        child.text = value

# Pretty-print with declaration
raw = tostring(root, encoding='unicode')
pretty = parseString(raw).toprettyxml(indent='  ')
print(pretty)
# → <?xml version="1.0" ?>
# → <data>
# →   <row>
# →     <name>Alice</name>
# →     <age>30</age>
# →     <city>Berlin</city>
# →   </row>
# →   ...
# → </data>
Go
package main

import (
	"encoding/csv"
	"encoding/xml"
	"fmt"
	"os"
	"strings"
)

type Field struct {
	XMLName xml.Name
	Value   string `xml:",chardata"`
}

type Row struct {
	XMLName xml.Name `xml:"row"`
	Fields  []Field
}

type Data struct {
	XMLName xml.Name `xml:"data"`
	Rows    []Row
}

func main() {
	input := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	r := csv.NewReader(strings.NewReader(input))
	records, _ := r.ReadAll()
	headers := records[0]

	var data Data
	for _, rec := range records[1:] {
		row := Row{}
		for i, h := range headers {
			row.Fields = append(row.Fields, Field{
				XMLName: xml.Name{Local: h},
				Value:   rec[i],
			})
		}
		data.Rows = append(data.Rows, row)
	}

	out, _ := xml.MarshalIndent(data, "", "  ")
	fmt.Println(xml.Header + string(out))
	// → <?xml version="1.0" encoding="UTF-8"?>
	// → <data><row><name>Alice</name>...</row>...</data>
}
CLI (csvkit / xmlstarlet)
# Using Python's csv and xml modules via one-liner
python3 -c "
import csv, sys
from xml.etree.ElementTree import Element, SubElement, tostring
from xml.dom.minidom import parseString

reader = csv.DictReader(sys.stdin)
root = Element('data')
for row in reader:
    r = SubElement(root, 'row')
    for k, v in row.items():
        SubElement(r, k).text = v
print(parseString(tostring(root, encoding='unicode')).toprettyxml(indent='  '))
" < data.csv

# Using Miller (mlr) — a dedicated CSV/JSON/XML tool
mlr --icsv --oxml cat data.csv

Часто задаваемые вопросы

Как работает конвертация CSV в XML?
Конвертер считывает первую строку CSV как заголовки столбцов. Каждая последующая строка становится XML-элементом, а значение каждой ячейки оборачивается в дочерний элемент с именем соответствующего заголовка. Результат — корректно оформленный XML-документ с корневым элементом, содержащим по одному дочернему элементу на каждую строку данных.
Что происходит со специальными символами — & и < — в данных CSV?
Конвертер экранирует все пять предопределённых XML-сущностей: & становится &amp;, < становится &lt;, > становится &gt;, " становится &quot;, а ' становится &apos;. Это обеспечивает корректный XML, который не сломает парсеры и не вызовет ошибок оформления.
Можно ли задать произвольные имена для корневого элемента и элемента строки?
Да. Инструмент позволяет задать имя корневого элемента (по умолчанию: "data") и имя элемента строки (по умолчанию: "row"). Имена дочерних элементов всегда берутся из заголовков столбцов CSV. Если заголовок содержит пробелы или символы, недопустимые в именах XML-элементов, инструмент автоматически нормализует их.
В чём разница между конвертацией CSV в XML и CSV в JSON?
Конвертация CSV в XML создаёт иерархический документ разметки с открывающими и закрывающими тегами, объявлением XML и поддержкой проверки по схеме (XSD/DTD). Конвертация CSV в JSON формирует более лёгкий массив объектов «ключ — значение». Используйте XML, если этого требует целевая система (SOAP API, регулируемые форматы, RSS-ленты). Используйте JSON для REST API, JavaScript-фронтенда и NoSQL-баз данных.
Как проверить сгенерированный XML-вывод?
Вставьте вывод в любой XML-валидатор для проверки корректности оформления (правильная вложенность, экранирование сущностей, соответствие тегов). Для проверки по схеме предоставьте XSD-файл и воспользуйтесь инструментом xmllint, Xerces или онлайн-валидатором XSD. XML, созданный этим инструментом, всегда корректно оформлен, однако соответствие схеме зависит от того, совпадает ли структура с вашей целевой схемой.
Справляется ли конвертер с большими CSV-файлами?
Инструмент работает в браузере, поэтому производительность зависит от доступной памяти. Файлы объёмом до нескольких мегабайт (десятки тысяч строк) конвертируются без проблем на современном оборудовании. Для очень больших файлов (100 МБ и более) рекомендуется использовать инструменты командной строки — например, модули csv и xml.etree из стандартной библиотеки Python или пакеты encoding/csv и encoding/xml для Go, которые обрабатывают данные потоком, не загружая всё в память.
Совместим ли сгенерированный XML с XSLT-трансформациями?
Да. Вывод представляет собой стандартный корректно оформленный XML с объявлением и единообразной структурой элементов. К нему можно применить любую XSLT-таблицу стилей для преобразования в HTML, другую XML-схему или обычный текст. Предсказуемая структура (корневой элемент → элементы строк → элементы полей) упрощает написание XPath-выражений и XSLT-шаблонов.