「XML(エックスエムエル)データってよく聞くけど、いったい何なの?」
Web開発やデータ交換の話題でXMLはよく登場しますが、実はしっかり説明できる人は少ないかもしれません。
この記事では、XMLデータとは何か、どんな場面で使われているのか、具体的にどんな書き方をするのかを初心者向けにわかりやすく解説します。
これを読めば、XMLが何に役立つのかスッキリ理解できますよ。
XMLデータとは何か

そもそもXMLとは
XMLは「eXtensible Markup Language(拡張可能なマークアップ言語)」の略で、データをタグで囲んで構造化するためのテキスト形式です。
1998年にW3C(World Wide Web Consortium)によって標準化された技術で、インターネットが普及し始めた頃から広く使われてきました。
XMLの基本的な特徴
人間が読めるテキスト形式
XMLはただのテキストファイルなので、メモ帳などの簡単なエディタでも開いて内容を確認できます。
自由度の高いタグ設計
HTMLとは違い、XMLには決まったタグがありません。データの内容に応じて、自分で好きなタグ名を決めることができます。
階層構造の表現
データを入れ子(ネスト)にして、複雑な関係性を表現できます。
プラットフォーム非依存
どんなOSやプログラミング言語でも扱えるため、異なるシステム間でのデータ交換に適しています。
XMLが解決する問題
データの意味を明確にする
単純なテキストファイルでは「このデータが何を表しているか」がわかりにくいですが、XMLなら意味を持ったタグで包むことで明確になります。
異なるシステム間での情報共有
XMLの標準化された書式により、異なる会社が作ったシステム同士でも、データのやり取りが可能になります。
XMLの基本構造と書き方

最もシンプルなXMLの例
<?xml version="1.0" encoding="UTF-8"?>
<user>
<name>山田太郎</name>
<age>30</age>
</user>
各部分の説明
XML宣言:
<?xml version="1.0" encoding="UTF-8"?>
- XMLファイルであることを示す
- バージョンと文字コードを指定
ルート要素:
<user>
<!-- 内容 -->
</user>
- XMLファイルには必ず一つのルート(最上位)要素が必要
子要素:
<name>山田太郎</name>
<age>30</age>
- ルート要素の中に含まれる要素
属性(アトリビュート)の使い方
タグには属性を付けることで、より詳細な情報を表現できます。
<user id="123" status="active">
<name>山田太郎</name>
<email type="work">taro@example.com</email>
<email type="personal">taro.private@example.com</email>
</user>
要素と属性の使い分け
要素として表現する場合:
- メインのデータとして扱いたい情報
- 複数の値を持つ可能性がある情報
属性として表現する場合:
- データの性質や分類を示す情報
- 一意の識別子(IDなど)
- メタデータ(データについてのデータ)
より複雑なXMLの例
<?xml version="1.0" encoding="UTF-8"?>
<library>
<book id="001" category="技術書">
<title>XML入門ガイド</title>
<author>
<name>鈴木一郎</name>
<nationality>日本</nationality>
</author>
<publisher>技術出版社</publisher>
<price currency="JPY">2800</price>
<published>2024-01-15</published>
<tags>
<tag>XML</tag>
<tag>データ形式</tag>
<tag>プログラミング</tag>
</tags>
</book>
<book id="002" category="小説">
<title>夏の物語</title>
<author>
<name>田中花子</name>
<nationality>日本</nationality>
</author>
<publisher>文芸社</publisher>
<price currency="JPY">1500</price>
<published>2023-08-20</published>
</book>
</library>
この例では以下の構造を表現しています:
- 図書館(library)の中に複数の本(book)
- 各本には著者(author)、出版社(publisher)などの情報
- 価格には通貨単位の属性
- タグ(分類)は複数設定可能
XMLが使われる具体的な場面

ビジネスシステムでのデータ交換
電子商取引(EC)
<order id="12345">
<customer>
<name>山田太郎</name>
<address>東京都渋谷区...</address>
</customer>
<items>
<item code="A001" quantity="2">
<name>ノートPC</name>
<price>98000</price>
</item>
</items>
<total>196000</total>
</order>
金融データの交換
銀行間でのデータ送受信や、会計システム間での情報連携にXMLが使われています。
設定ファイル
Androidアプリのレイアウト
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:text="こんにちは"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button
android:text="ボタン"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
Webサーバーの設定
Apache TomcatやSpring Frameworkなどの設定ファイルでXMLが使われています。
<configuration>
<database>
<host>localhost</host>
<port>3306</port>
<name>myapp_db</name>
</database>
<logging level="INFO" />
</configuration>
WebサービスAPI
SOAP(Simple Object Access Protocol)
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetUser xmlns="http://example.com/userservice">
<UserId>123</UserId>
</GetUser>
</soap:Body>
</soap:Envelope>
RSS(Rich Site Summary)
ブログやニュースサイトの更新情報を配信するのにXMLが使われています。
<rss version="2.0">
<channel>
<title>技術ブログ</title>
<description>最新の技術情報をお届け</description>
<item>
<title>XMLデータとは?</title>
<description>XMLの基本について解説</description>
<pubDate>Mon, 15 Jan 2024 10:00:00 GMT</pubDate>
</item>
</channel>
</rss>
Microsoft Officeファイル
Word、Excel、PowerPointファイル
現在のOfficeファイル(.docx、.xlsx、.pptxなど)は、実はXMLをZip形式で圧縮したものです。
<!-- Excelのワークシート例 -->
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
<sheetData>
<row r="1">
<c r="A1" t="str">
<v>名前</v>
</c>
<c r="B1" t="str">
<v>年齢</v>
</c>
</row>
</sheetData>
</worksheet>
XMLと他のデータ形式の比較

XML vs JSON
JSONの例
{
"user": {
"name": "山田太郎",
"age": 30,
"emails": [
{"type": "work", "address": "taro@example.com"},
{"type": "personal", "address": "taro.private@example.com"}
]
}
}
比較表
特徴 | XML | JSON |
---|---|---|
読みやすさ | タグで意味が明確 | シンプルで軽量 |
ファイルサイズ | 大きい | 小さい |
データ型 | すべて文字列 | 数値、真偽値なども表現可能 |
スキーマ検証 | XSDで厳密に定義可能 | JSON Schemaで可能 |
名前空間 | サポートあり | なし |
コメント | 書ける | 書けない |
それぞれの適用場面
XMLが適している場面:
- 厳密なデータ検証が必要
- 複雑な階層構造
- 古いシステムとの連携
- ドキュメント的な要素が強い
JSONが適している場面:
- Web APIでの軽量なデータ交換
- JavaScriptとの相性重視
- モバイルアプリでの通信
- リアルタイム性が重要
XML vs CSV
CSVの例
名前,年齢,メールアドレス
山田太郎,30,taro@example.com
佐藤花子,25,hanako@example.com
使い分け
CSV:
- 単純な表形式データ
- Excelでの編集が必要
- データ分析用途
XML:
- 複雑な構造を持つデータ
- データの意味を明確にしたい
- システム間連携
XMLを扱うときの重要なルールと注意点

文法ルール(Well-formed XML)
タグの正しい閉じ方
<!-- 正しい例 -->
<name>山田太郎</name>
<!-- 間違った例 -->
<name>山田太郎
<name>山田太郎</nama>
ネストの正しい順序
<!-- 正しい例 -->
<user>
<name>山田太郎</name>
</user>
<!-- 間違った例 -->
<user>
<name>山田太郎
</user>
</name>
属性値は必ずクォートで囲む
<!-- 正しい例 -->
<user id="123" name="山田太郎">
<!-- 間違った例 -->
<user id=123 name=山田太郎>
ルート要素は一つだけ
<!-- 正しい例 -->
<data>
<user1>...</user1>
<user2>...</user2>
</data>
<!-- 間違った例 -->
<user1>...</user1>
<user2>...</user2>
文字エンコーディングの注意
日本語を含む場合
<?xml version="1.0" encoding="UTF-8"?>
<message>こんにちは、世界!</message>
UTF-8エンコーディングの指定が重要です。
特殊文字のエスケープ
XMLでは以下の文字は特別な意味を持つため、データとして使用する場合はエスケープが必要です。
文字 | エスケープ | 説明 |
---|---|---|
< | < | 小なり |
> | > | 大なり |
& | & | アンパサンド |
" | " | ダブルクォート |
' | ' | シングルクォート |
例
<message>価格は100 < 200円です。</message>
<html><div>HTMLタグ</div></html>
XMLスキーマとバリデーション
XSD(XML Schema Definition)
XSDは、XMLの構造や制約を定義するための仕組みです。
スキーマの例
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="user">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:int" minOccurs="0"/>
<xs:element name="email" type="xs:string" maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="id" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:schema>
スキーマで定義できること
- データ型:文字列、数値、日付など
- 必須項目:必ず存在するべき要素
- 出現回数:要素が何回まで現れるか
- 値の制約:最小値、最大値、文字列の長さなど
DTD(Document Type Definition)
XSDよりも古い仕組みですが、まだ使われている場合があります。
<!DOCTYPE library [
<!ELEMENT library (book+)>
<!ELEMENT book (title, author, price)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ATTLIST book id ID #REQUIRED>
]>
プログラミング言語でのXML処理
Python での例
import xml.etree.ElementTree as ET
# XMLを読み込み
xml_data = '''
<library>
<book id="001">
<title>XML入門</title>
<author>山田太郎</author>
</book>
</library>
'''
# パース(解析)
root = ET.fromstring(xml_data)
# データの取得
book = root.find('book')
title = book.find('title').text
author = book.find('author').text
book_id = book.get('id')
print(f"ID: {book_id}")
print(f"タイトル: {title}")
print(f"著者: {author}")
JavaScript での例
// XMLを解析
const parser = new DOMParser();
const xmlDoc = parser.parseFromString(xmlData, "text/xml");
// データの取得
const book = xmlDoc.querySelector('book');
const title = book.querySelector('title').textContent;
const author = book.querySelector('author').textContent;
const bookId = book.getAttribute('id');
console.log(`ID: ${bookId}`);
console.log(`タイトル: ${title}`);
console.log(`著者: ${author}`);
XMLの将来性と現在の位置づけ

XMLが今でも重要な理由
既存システムとの互換性
多くの既存システムがXMLベースで構築されているため、XMLの知識は現在でも必要です。
厳密なデータ定義
金融や医療など、データの正確性が重要な分野では、XMLのスキーマ機能が重宝されています。
文書構造の表現
Microsoft OfficeファイルやSVG画像など、文書の構造を表現するのにXMLが使われています。
新しい技術との組み合わせ
RESTful APIでの利用
JSONが主流ですが、XMLも選択肢として残っています。
マイクロサービス間通信
システム間のデータ交換で、今でもXMLが使われるケースがあります。
まとめ
XMLデータの特徴まとめ
- 構造化されたテキストデータ:階層的にデータを整理
- 自由なタグ設計:用途に応じてタグ名を決められる
- プラットフォーム非依存:どんなシステムでも扱える
- 厳密な文法:正確性を重視した仕様
- スキーマによる検証:データの妥当性をチェック可能
XMLを学ぶメリット
- 幅広いシステムに対応:既存システムとの連携に必要
- データ構造の理解:構造化データの考え方が身に付く
- Web技術の基礎:HTMLやSVGなど関連技術の理解につながる
- ビジネススキル:企業間のデータ交換を理解できる
コメント