ToolDeck

CSV to XML

CSV データを XML 形式に変換

サンプルを試す

CSV 入力

XML 出力

ローカルで実行 · シークレットの貼り付けも安全
XML 出力がここに表示されます…

CSVからXMLへの変換とは?

CSVからXMLへの変換は、カンマ区切りの値を拡張マークアップ言語(XML)ドキュメントに変換する処理です。CSVの各行がXML要素になり、各カラムヘッダーが子要素のタグ名に対応します。結果は階層的な自己記述ドキュメントであり、スキーマ(XSDまたはDTD)に対して検証でき、XSLT、XPath、SAX/DOMパーサーといった標準的なXMLツールで処理できます。

XMLは、W3CがXML 1.0仕様を1998年に公開して以来、データ交換の標準形式として使われてきました。多くのWeb APIではJSONがXMLに取って代わっていますが、XMLはSOAP Webサービス、RSS/Atomフィード、SVGグラフィクス、Office Open XMLドキュメント(.docx、.xlsx)、Androidリソースファイル、Maven/Gradleビルド設定、そして医療(HL7 CDA)・金融(FpML、XBRL)・行政(NIEM)などの規制分野で依然として必須の形式です。スプレッドシートやデータベースのエクスポートがデータのソースである場合、CSVからXMLへの変換はそのデータをこれらのシステムに取り込む手段となります。

正確なCSVからXMLへのコンバーターは、RFC 4180のエッジケース——カンマや改行を含むクォートフィールド、エスケープされたダブルクォート、さまざまな区切り文字——を処理しなければなりません。XML側では、5つの定義済みXMLエンティティ(&、<、>、"、')をエスケープし、ヘッダーから有効な要素名を生成し(スペースや特殊文字を置換)、適切なXML宣言と一貫したエンコーディングを持つ整形式の出力を生成する必要があります。

CSVからXMLへの変換ツールを使う理由

スプレッドシートのデータからXMLを手書きするのは時間がかかり、エラーが発生しやすいです。閉じタグを忘れたり、アンパサンドのエスケープを失念すると、無効なXMLが生成されてダウンストリームのパーサーが壊れます。このコンバーターは、解析・エスケープ・要素生成を一度の処理で行います。

ブラウザで即座に変換
CSVを貼り付けるだけで、適切な宣言・ルート要素・ネストされた子要素を持つ整形式のXML出力が得られます。コマンドラインツールやライブラリのインストールは不要です。
🔒
データはプライベートに保持
変換処理はすべてJavaScriptを使ってブラウザ内でローカルに実行されます。CSVデータがサーバーにアップロードされることも、ログに記録されることも、あなたのマシンの外に保存されることも一切ありません。
🎯
有効な整形式XMLを生成
出力はXMLエンティティをエスケープし、ヘッダー名を有効な要素タグに変換し、あらゆるXMLバリデーターやリンターを通過できる正しくネストされたマークアップを生成します。
📋
あらゆるCSV形式に対応
カンマ・セミコロン・タブ・パイプを区切り文字として自動検出します。エスケープされたダブルクォート、複数行フィールド、BOMプレフィックス付きUTF-8ファイルを含むRFC 4180のクォートルールをサポートします。

CSVからXML変換のユースケース

SOAPおよびレガシーAPI連携
多くのエンタープライズシステムは、XMLリクエストボディを必要とするSOAP Webサービスを使用しています。CSVのデータエクスポートを、リクエスト送信前にサービスのWSDLスキーマに合致するXMLペイロードに変換します。
ビルド設定ファイルの生成
依存関係・文字列・設定エントリのスプレッドシートから、Maven pom.xmlの依存関係リスト、Androidリソースファイル、またはSpringビーン定義を生成します。単一のCSVソースからXML設定をまとめて作成できます。
データパイプラインの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
プレーンテキスト、1行に1レコード。データ型なし:すべての値は文字列。階層やネストなし。ファイルサイズが小さい。スプレッドシート・データベース・スクリプト言語で広くサポートされています。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の1行目をカラムヘッダーとして読み込みます。それ以降の各行がXML要素になり、各セルの値はカラムヘッダーの名前を持つ子要素でラップされます。結果は、1つのデータ行につき1つの子要素を含むルート要素を持つ整形式のXMLドキュメントです。
CSVデータ内の「&」や「<」などの特殊文字はどうなりますか?
コンバーターはXMLの定義済みエンティティをすべてエスケープします:「&」は「&amp;」、「<」は「&lt;」、「>」は「&gt;」、「"」は「&quot;」、「'」は「&apos;」になります。これにより、パーサーを壊したり整形式エラーを引き起こさない有効なXMLが生成されます。
ルート要素や行要素にカスタムのタグ名を使用できますか?
はい。ツールではルート要素名(デフォルト:「data」)と行要素名(デフォルト:「row」)を設定できます。CSVのカラムヘッダーは常に子要素名になります。ヘッダーにスペースやXML要素名として無効な文字が含まれている場合、ツールが自動的に変換します。
CSVからXMLへの変換とCSVからJSONへの変換の違いは何ですか?
CSVからXMLへの変換は、開始/終了タグ・XML宣言・スキーマ検証(XSD/DTD)のサポートを持つ階層的なマークアップドキュメントを生成します。CSVからJSONへの変換は、より軽量なキーと値のオブジェクトの配列を生成します。ターゲットシステムが必要とする場合(SOAP API、規制フォーマット、RSSフィード)はXMLを使用してください。REST API・JavaScriptフロントエンド・NoSQLデータベースにはJSONを使用してください。
生成されたXML出力を検証するにはどうすればよいですか?
出力を任意のXMLバリデーターに貼り付けて整形式(正しいネスト・適切なエンティティエスケープ・タグの対応)を確認してください。スキーマ検証には、XSDファイルを用意してxmllint・Xerces・またはオンラインのXSDバリデーターを使用してください。このツールが生成するXMLは常に整形式ですが、スキーマの妥当性は構造がターゲットスキーマと一致するかどうかによります。
大きなCSVファイルも変換できますか?
ツールはブラウザ内で実行されるため、パフォーマンスは利用可能なメモリによって異なります。数メガバイト(数万行)までのファイルは、最新のハードウェアであれば問題なく変換できます。非常に大きなファイル(100MB以上)には、Pythonのcsvモジュールとxml.etreeモジュール、またはGoのencoding/csvとencoding/xmlパッケージなどのコマンドラインツールを検討してください。これらはすべてをメモリに読み込まずにストリームとして処理します。
生成されたXMLはXSLT変換に対応していますか?
はい。出力は宣言と一貫した要素構造を持つ標準的な整形式XMLです。任意のXSLTスタイルシートを適用して、HTML・別のXMLスキーマ・またはプレーンテキストに変換できます。予測可能な構造(ルート > 行 > フィールド要素)により、XPathセレクターやXSLTテンプレートの記述が容易になります。