ToolDeck

Chuyển đổi CSV sang XML

Chuyển đổi dữ liệu CSV sang định dạng XML

Thử ví dụ

Đầu vào CSV

Đầu ra XML

Chạy cục bộ · An toàn để dán thông tin bí mật
Đầu ra XML sẽ hiển thị ở đây…

Chuyển đổi CSV sang XML là gì?

Chuyển đổi CSV sang XML là quá trình biến đổi các giá trị phân tách bằng dấu phẩy thành tài liệu Ngôn ngữ Đánh dấu Mở rộng (XML). Mỗi hàng trong CSV trở thành một phần tử XML, và mỗi tiêu đề cột ánh xạ thành tên thẻ phần tử con. Kết quả là một tài liệu phân cấp, tự mô tả mà các hệ thống có thể xác thực theo lược đồ (XSD hoặc DTD) và xử lý bằng các công cụ XML tiêu chuẩn như XSLT, XPath, và bộ phân tích SAX/DOM.

XML đã là tiêu chuẩn trao đổi dữ liệu từ khi W3C công bố đặc tả XML 1.0 vào năm 1998. Mặc dù JSON đã thay thế XML trong nhiều API web, XML vẫn là định dạng bắt buộc cho các dịch vụ web SOAP, nguồn cấp RSS/Atom, đồ họa SVG, tài liệu Office Open XML (.docx, .xlsx), tệp tài nguyên Android, cấu hình build Maven/Gradle, và các ngành được quản lý như y tế (HL7 CDA), tài chính (FpML, XBRL), và chính phủ (NIEM). Khi dữ liệu nguồn của bạn là bảng tính hoặc xuất từ cơ sở dữ liệu, chuyển đổi CSV sang XML là cách đưa dữ liệu vào các hệ thống này.

Một bộ chuyển đổi CSV sang XML đúng phải xử lý các trường hợp biên của RFC 4180: trường được trích dẫn chứa dấu phẩy hoặc ký tự xuống dòng, dấu ngoặc kép thoát, và các ký tự phân tách khác nhau. Về phía XML, nó phải thoát năm thực thể XML được định nghĩa sẵn (& < > " '), tạo tên phần tử hợp lệ từ tiêu đề (thay thế khoảng trắng và ký tự đặc biệt), và tạo ra đầu ra chuẩn với khai báo XML phù hợp và mã hóa nhất quán.

Tại sao sử dụng công cụ chuyển đổi CSV sang XML?

Viết XML thủ công từ dữ liệu bảng tính rất chậm và dễ xảy ra lỗi. Thiếu thẻ đóng hoặc quên thoát ký hiệu & sẽ tạo ra XML không hợp lệ, làm hỏng bộ phân tích phía sau. Công cụ này xử lý việc phân tích, thoát ký tự và tạo phần tử trong một bước duy nhất.

Chuyển đổi ngay trong trình duyệt
Dán CSV và nhận đầu ra XML chuẩn với khai báo đầy đủ, phần tử gốc và các phần tử con lồng nhau. Không cần công cụ dòng lệnh hay cài đặt thư viện.
🔒
Bảo mật dữ liệu
Toàn bộ quá trình chuyển đổi chạy cục bộ trong trình duyệt bằng JavaScript. Dữ liệu CSV của bạn không bao giờ được tải lên máy chủ, không được ghi nhật ký, và không được lưu trữ ở bất kỳ đâu ngoài máy của bạn.
🎯
Tạo XML hợp lệ, chuẩn xác
Đầu ra thoát các thực thể XML, làm sạch tên tiêu đề thành thẻ phần tử hợp lệ, và tạo ra đánh dấu lồng nhau đúng chuẩn vượt qua bất kỳ bộ xác thực hoặc linter XML nào.
📋
Xử lý mọi phương ngữ CSV
Tự động phát hiện dấu phẩy, chấm phẩy, tab và ký tự pipe làm ký tự phân tách. Hỗ trợ các quy tắc trích dẫn RFC 4180 bao gồm dấu ngoặc kép thoát, trường nhiều dòng và tệp UTF-8 có BOM.

Các trường hợp sử dụng CSV sang XML

Tích hợp SOAP và API legacy
Nhiều hệ thống doanh nghiệp vẫn sử dụng dịch vụ web SOAP yêu cầu nội dung yêu cầu dạng XML. Chuyển đổi xuất dữ liệu CSV thành tải trọng XML khớp với lược đồ WSDL của dịch vụ trước khi gửi yêu cầu.
Tạo tệp cấu hình build
Tạo danh sách phụ thuộc Maven pom.xml, tệp tài nguyên Android hoặc định nghĩa bean Spring từ bảng tính chứa các phụ thuộc, chuỗi hoặc mục cấu hình. Tạo hàng loạt cấu hình XML từ một nguồn CSV duy nhất.
ETL pipeline dữ liệu
Đưa xuất CSV từ cơ sở dữ liệu hoặc công cụ phân tích vào các pipeline ETL dựa trên XML. Các công cụ như Apache NiFi, Talend và SSIS chấp nhận đầu vào XML cho các quy trình chuyển đổi yêu cầu xác thực lược đồ ở mỗi giai đoạn.
Báo cáo tuân thủ và quy định
Các ngành như y tế (HL7 CDA), tài chính (XBRL, FpML) và chính phủ (NIEM) yêu cầu nộp báo cáo theo định dạng XML. Chuyển đổi dữ liệu tuân thủ dạng bảng thành cấu trúc XML cần thiết trước khi nộp.
Tạo nguồn cấp RSS và Atom
Biến danh sách CSV gồm các bài viết, tiêu đề và ngày tháng thành nguồn cấp RSS 2.0 hoặc Atom. Quy trình quản lý nội dung thường bắt đầu bằng bảng tính các bài đăng cần được xuất bản dưới dạng nguồn cấp tổng hợp.
Dạy các nguyên tắc cơ bản về XML
Sinh viên học XML có thể dán dữ liệu CSV quen thuộc và xem hệ thống phân cấp phần tử, lồng nhau và thoát thực thể kết quả. So sánh đầu vào và đầu ra giúp các khái niệm trừu tượng như tính chuẩn xác và hợp lệ trở nên cụ thể.

Tài liệu tham khảo ánh xạ CSV sang XML

Hiểu cách mỗi phần của tệp CSV ánh xạ sang cấu trúc XML giúp bạn dự đoán định dạng đầu ra và điều chỉnh dữ liệu trước khi chuyển đổi.

Khái niệm CSVTương đương XMLChi tiết
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 so với XML

CSV là định dạng phẳng dựa trên ký tự phân tách, không có lược đồ hay kiểu dữ liệu tích hợp. XML là ngôn ngữ đánh dấu phân cấp, tự mô tả, hỗ trợ lược đồ, không gian tên và lồng nhau phức tạp. Việc lựa chọn giữa hai định dạng phụ thuộc vào yêu cầu của hệ thống downstream.

CSV
Văn bản thuần túy, mỗi bản ghi một dòng. Không có kiểu dữ liệu: mọi giá trị đều là chuỗi. Không có phân cấp hay lồng nhau. Kích thước tệp tối thiểu. Được hỗ trợ phổ biến bởi bảng tính, cơ sở dữ liệu và ngôn ngữ lập trình. Được định nghĩa bởi RFC 4180. Tốt nhất cho việc chuyển dữ liệu bảng đơn giản giữa các hệ thống đều hiểu bố cục cột.
XML
Đánh dấu phân cấp với thẻ mở và thẻ đóng. Hỗ trợ thuộc tính, không gian tên, nội dung hỗn hợp và phần CDATA. Có thể được xác thực theo lược đồ XSD hoặc DTD. Được xử lý bởi XSLT, XPath, SAX và bộ phân tích DOM. Kích thước tệp lớn hơn CSV do chi phí thẻ. Bắt buộc với SOAP API, Office Open XML, RSS/Atom và nhiều ngành được quản lý.

Ví dụ mã lệnh

Dưới đây là các ví dụ thực tế về chuyển đổi CSV sang XML bằng các ngôn ngữ khác nhau. Mỗi ví dụ phân tích hàng tiêu đề CSV làm tên thẻ phần tử, bọc mỗi hàng dữ liệu trong phần tử chứa, và thoát các thực thể XML trong nội dung ô.

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

Câu hỏi thường gặp

Chuyển đổi CSV sang XML hoạt động như thế nào?
Công cụ đọc hàng đầu tiên của CSV làm tiêu đề cột. Mỗi hàng tiếp theo trở thành một phần tử XML, và mỗi giá trị ô được bọc trong phần tử con được đặt tên theo tiêu đề cột tương ứng. Kết quả là một tài liệu XML chuẩn với phần tử gốc chứa một phần tử con cho mỗi hàng dữ liệu.
Điều gì xảy ra với các ký tự đặc biệt như & và < trong dữ liệu CSV của tôi?
Công cụ thoát tất cả năm thực thể XML được định nghĩa sẵn: & trở thành &amp;, < trở thành &lt;, > trở thành &gt;, " trở thành &quot;, và ' trở thành &apos;. Điều này tạo ra XML hợp lệ không làm hỏng bộ phân tích hay gây lỗi chuẩn xác.
Tôi có thể sử dụng tên thẻ tùy chỉnh cho phần tử gốc và phần tử hàng không?
Có. Công cụ cho phép bạn đặt tên phần tử gốc (mặc định: "data") và tên phần tử hàng (mặc định: "row"). Tiêu đề cột từ CSV luôn trở thành tên phần tử con. Nếu tiêu đề chứa khoảng trắng hoặc ký tự không hợp lệ trong tên phần tử XML, công cụ sẽ tự động làm sạch chúng.
Sự khác biệt giữa CSV sang XML và CSV sang JSON là gì?
CSV sang XML tạo ra tài liệu đánh dấu phân cấp với thẻ mở/đóng, khai báo XML và hỗ trợ xác thực lược đồ (XSD/DTD). CSV sang JSON tạo ra mảng đối tượng khóa-giá trị nhẹ hơn. Dùng XML khi hệ thống đích yêu cầu (SOAP API, định dạng quy định, nguồn cấp RSS). Dùng JSON cho REST API, frontend JavaScript và cơ sở dữ liệu NoSQL.
Làm thế nào để xác thực đầu ra XML được tạo?
Dán đầu ra vào bất kỳ bộ xác thực XML nào để kiểm tra tính chuẩn xác (lồng nhau đúng, thoát thực thể đúng, thẻ khớp nhau). Để xác thực lược đồ, cung cấp tệp XSD và sử dụng công cụ như xmllint, Xerces hoặc bộ xác thực XSD trực tuyến. XML do công cụ này tạo ra luôn chuẩn xác, nhưng tính hợp lệ theo lược đồ phụ thuộc vào việc cấu trúc có khớp với lược đồ mục tiêu hay không.
Công cụ có xử lý được tệp CSV lớn không?
Công cụ chạy trong trình duyệt, do đó hiệu suất phụ thuộc vào bộ nhớ khả dụng. Các tệp lên đến vài megabyte (hàng chục nghìn hàng) chuyển đổi không có vấn đề trên phần cứng hiện đại. Với các tệp rất lớn (100MB+), hãy cân nhắc sử dụng công cụ dòng lệnh như mô-đun csv và xml.etree của Python hoặc các gói encoding/csv và encoding/xml của Go, xử lý dữ liệu theo luồng mà không tải toàn bộ vào bộ nhớ.
XML được tạo có tương thích với các phép biến đổi XSLT không?
Có. Đầu ra là XML chuẩn xác tiêu chuẩn với khai báo và cấu trúc phần tử nhất quán. Bạn có thể áp dụng bất kỳ bảng định kiểu XSLT nào để chuyển đổi nó thành HTML, lược đồ XML khác hoặc văn bản thuần túy. Cấu trúc có thể dự đoán (gốc > hàng > phần tử trường) giúp việc viết bộ chọn XPath và mẫu XSLT trở nên đơn giản.