CodeKitHub
JSON 도구

CSV to XML 변환기

마지막 업데이트:

CSV를 XML로 변환할 때 각 행은 <row> 요소가 되고 각 열은 헤더 이름을 딴 자식 태그가 됩니다. 반대 방향의 변환에서는 XML에서 발견되는 고유한 자식 태그 이름마다 하나의 열이 추출됩니다. CSV를 XML로, 또는 XML을 다시 CSV로 — 하나의 도구에서 원하는 형식을 붙여넣고 변환 방향만 선택하면 됩니다. CSV의 각 행은 <row> 요소가 되고, 각 열은 헤더 이름을 딴 자식 태그로 변환됩니다. XML 입력은 브라우저 자체 XML 파서로 다시 열 단위로 분석됩니다. 모든 처리는 로컬에서 이루어지므로 데이터가 기기 밖으로 나가지 않습니다.

이 도구는 무엇인가요?

일부 시스템(레거시 기업용 소프트웨어, SOAP 기반 API, RSS와 유사한 피드 등)은 데이터를 XML 형식으로 요구하는 반면, 스프레드시트나 대부분의 데이터 임포트 도구는 CSV를 사용합니다. 이 도구는 두 형식 사이를 오갈 수 있게 해줍니다. CSV → XML은 각 행을 <row> 요소로 감싸 루트 <rows> 요소 안에 넣고, 각 열은 헤더 이름을 딴 자식 태그가 됩니다. XML → CSV는 그 반대로, 발견되는 고유한 자식 태그 이름마다 하나의 열을 추출합니다.

CSV 쪽은 단순히 쉼표로 나누는 방식이 아니라 제대로 된 따옴표 필드 파서로 처리되므로, 쉼표나 줄바꿈, 이스케이프된 따옴표가 포함된 값도 정확히 다뤄집니다. XML 쪽은 브라우저가 내부적으로 XML 문서를 파싱할 때 쓰는 것과 동일한 인터페이스인 DOMParser API로 분석되며, 직접 짠 정규식 기반 리더가 아니기 때문에 중첩 태그나 표준 XML 이스케이프 처리가 실제 XML 파서와 똑같이 이루어집니다.

유효한 XML 요소 이름이 아닌 열/태그 이름(공백 포함, 숫자로 시작 등)은 XML을 생성할 때 자동으로 정리(sanitize)됩니다. XML 요소 이름은 CSV 헤더보다 규칙이 더 까다롭기 때문입니다.

출처: CSV 파싱은 RFC 4180을 따르며, XML 구조는 W3C XML 1.0 사양을 따릅니다.

왜 사용해야 할까요?

  • 양방향 지원 — CSV to XML, XML to CSV를 하나의 도구에서.
  • 정확한 CSV 파싱 — 쉼표나 줄바꿈, 이스케이프된 따옴표가 포함된 필드도 단순 쉼표 분리가 아니라 제대로 처리.
  • 표준 기반 XML 파싱 — XML → CSV는 커스텀 정규식 파서 대신 브라우저 내장 DOMParser를 사용하므로, 형식이 잘못된 XML은 조용히 이상한 결과를 내는 대신 오류로 알려줍니다.
  • 자동 XML 이스케이프 — CSV 값에 있는 &, < 같은 특수문자가 XML 생성 시 올바르게 이스케이프됩니다.
  • 100% 클라이언트 사이드 — 여기에 붙여넣은 내용은 서버로 업로드되지 않습니다.

사용 방법

  1. 박스에 CSV 데이터(헤더 행 포함)나 XML 데이터를 붙여넣으세요.
  2. "CSV → XML"을 클릭해 XML을 생성하거나, "XML → CSV"를 클릭해 XML을 표로 되돌리세요.
  3. 결과를 확인한 뒤 복사하거나 파일로 다운로드하세요.
  4. CSV → XML의 경우, 각 행이 <row> 요소가 되고 열마다 태그가 하나씩 생기며 전체가 <rows> 루트로 감싸집니다.

예시

입력

name,age
Alice,30
Bob,25

결과

<?xml version="1.0" encoding="UTF-8"?>
<rows>
  <row>
    <name>Alice</name>
    <age>30</age>
  </row>
  <row>
    <name>Bob</name>
    <age>25</age>
  </row>
</rows>

CSV의 각 행은 하나의 <row> 요소가 되고, 각 열은 헤더 이름을 딴 자식 태그가 됩니다. 이 XML을 다시 "XML → CSV"로 돌리면 원래의 2열짜리 표가 그대로 복원됩니다.

실전 팁

  • XML을 요구하는 레거시 시스템이나 SOAP API에 데이터를 넣어야 한다면, CSV 내보내기 파일을 먼저 여기서 변환한 뒤 나온 XML을 그대로 대상 시스템에 붙여넣으세요.
  • 받은 XML 파일을 검토해야 한다면 XML → CSV로 변환해서, 별도의 XML 편집기 없이도 빠르게 읽기 쉬운 표 형태로 확인할 수 있습니다.
  • XML이 단순한 <row><column> 구조가 아니라 여러 단계로 깊게 중첩되어 있다면 이 도구는 임의의 중첩 구조를 평탄화하지 못합니다. row 요소 한 단계 안에 단순한 column 요소들이 들어있는 구조를 전제로 합니다.

직접 짠 XML 리더 대신 DOMParser를 쓰는 이유

XML에는 중첩 요소, 속성 값의 따옴표 처리, &, <, > 같은 문자의 이스케이프 등 실질적인 구조 규칙이 있어서, 간단한 정규식 기반 파서는 아주 단순한 입력이 아니면 미묘하게 틀리기 쉽습니다. 브라우저 내장 DOMParser API를 사용하면, 이 도구는 XML 파싱을 처음부터 다시 구현하는 대신 브라우저가 실제로 XML 문서를 렌더링할 때 쓰는 표준 준수 XML 엔진을 그대로 활용하게 됩니다. 또한 닫히지 않은 태그나 잘못 놓인 꺾쇠 괄호 같은 형식 오류가 있는 XML은 손상되거나 불완전한 CSV를 조용히 만들어내는 대신 명확한 파싱 오류로 드러납니다.

자주 묻는 질문

쉼표나 따옴표가 들어간 CSV 값도 제대로 처리되나요?

네. CSV 파서는 현재 따옴표 필드 안에 있는지를 추적하는 제대로 된 상태 기계(state machine) 방식이라, 따옴표 안의 쉼표나 줄바꿈(예: "Smith, John")과 리터럴 따옴표를 표현하기 위한 이중 따옴표까지 모두 정확히 처리됩니다. 무작정 쉼표마다 자르는 방식이 아닙니다.

XML은 어떻게 파싱하나요? 직접 만든 정규식 파서인가요?

아닙니다. XML → CSV는 브라우저 내장 DOMParser API를 사용해 XML을 실제 문서 트리로 파싱합니다. 브라우저가 아무 XML 문서를 파싱할 때와 동일한 방식이죠. 덕분에 형식이 잘못된 XML은 직접 짠 정규식 파서처럼 조용히 잘못된 결과를 내는 대신, 오류로 감지되어 알려줍니다.

유효한 XML 태그가 아닌 열 이름은 어떻게 되나요?

문자, 숫자, 밑줄, 하이픈, 마침표가 아닌 문자는 모두 밑줄로 바뀌고, 이름이 숫자나 기호로 시작하는 경우에는 앞에 밑줄이 추가됩니다. CSV 헤더와 달리 XML 요소 이름은 숫자로 시작하거나 공백을 포함할 수 없기 때문입니다.

제 데이터가 서버로 전송되나요?

아니요. 양방향 변환 모두 브라우저 안에서 JavaScript로, 브라우저 자체의 XML 파싱 엔진을 이용해 실행됩니다. 어디로도 전송되지 않으므로 회사 업무나 고객 데이터를 다루는 파일에도 안심하고 쓸 수 있습니다.

CSV → XML → CSV로 왕복하면 원본 그대로 돌아오나요?

열 구성이 일관된 정상적인 CSV라면 그렇습니다 — 값은 왕복 과정에서 그대로 유지됩니다. 다만 원본 CSV의 행마다 열 구성이 다르거나 헤더 이름에 특수 문자가 있었다면, 태그 이름이 정리되는 과정에서 헤더 표기가 완벽히 똑같이 보존되지는 않을 수 있습니다. 값 자체는 그대로 유지됩니다.

관련 도구