ToolDeck

CSV to XML

Конвертуйте CSV-дані у формат XML

Спробувати приклад

CSV-вхід

XML-вихід

Працює локально · Безпечно вставляти секрети
XML-вихід з'явиться тут…

Що таке конвертація CSV у XML?

Конвертація CSV у XML перетворює значення, розділені комами, на документи у форматі XML (Extensible Markup Language). Кожен рядок 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 на основі табличних даних — повільно та ненадійно. Пропущений закривальний тег або незаекранований амперсанд роблять 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 beans зі таблиці залежностей, рядків або параметрів конфігурації. Пакетно генеруйте XML-конфігурації з єдиного CSV-джерела.
ETL-конвеєри обробки даних
Передавайте CSV-експорти з баз даних або аналітичних інструментів до XML-орієнтованих ETL-конвеєрів. Інструменти Apache NiFi, Talend та SSIS приймають XML-вхідні дані для робочих процесів трансформації з перевіркою схеми на кожному етапі.
Регуляторна та комплаєнс-звітність
Галузі охорони здоров'я (HL7 CDA), фінансів (XBRL, FpML) і державного управління (NIEM) вимагають подачі даних у форматі XML. Конвертуйте таблиці комплаєнс-даних до потрібної XML-структури перед поданням.
Генерація RSS та Atom-стрічок
Перетворюйте CSV-список статей, заголовків і дат на стрічку RSS 2.0 або Atom. Робочі процеси управління контентом часто починаються з таблиці публікацій, які потрібно оприлюднити як стрічку синдикації.
Вивчення основ XML
Студенти, що вивчають XML, можуть вставити знайомі CSV-дані і побачити отриману ієрархію елементів, вкладеність та екранування сутностей. Порівняння вводу та виводу робить абстрактні поняття правильної побудови та валідності наочними.

Довідник зіставлення 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-шаблонів.