「XMLを触っていて、タグとか要素ってよく出てくるけど、結局何が違うの?」
「これってタグなの?要素なの?」
こんな疑問を持ったことはありませんか?
XML(エックスエムエル)はデータを構造化して表現するための言語です。HTMLに似ていますが、意味や役割は少し違います。
この記事では、XMLにおけるタグと要素の意味や違いを、初心者にもわかるように具体例を交えてやさしく説明します。これを読めば、今後XMLを読むときや書くときに、自然と理解できるようになります。
XMLとは何か?基本を確認

XMLの基本的な役割
まず、XMLについて簡単におさらいしましょう。
XMLの特徴:
- データを構造化して保存・交換するための言語
- タグを使ってデータに意味を付ける
- 人間にも機械にも読みやすい形式
- プログラム間でのデータ交換によく使われる
HTMLとの違い
XMLとHTMLは似ていますが、目的が異なります:
項目 | XML | HTML |
---|---|---|
目的 | データの構造化・保存 | ウェブページの表示 |
タグ | 自由に定義可能 | 決められたタグのみ |
用途 | データ交換、設定ファイル | ウェブサイト作成 |
例 | <product><name>商品名</name></product> | <h1>見出し</h1><p>段落</p> |
XMLのタグとは?
タグの基本的な説明
「タグ」について詳しく見てみましょう。
タグは、データを囲むマークのことです。<
で始まり >
で終わる記号がタグです。
基本的な例
<name>田中</name>
この例では:
<name>
が開始タグ(スタートタグ)</name>
が終了タグ(エンドタグ)
このタグがデータを囲んで、データに「これは名前ですよ」という意味を持たせています。
タグの種類
開始タグと終了タグ
<title>XMLの基本</title>
<!-- ↑開始タグ ↑終了タグ -->
<price>1500</price>
<!-- ↑開始タグ ↑終了タグ -->
重要なポイント:
- 開始タグは
<タグ名>
- 終了タグは
</タグ名>
(スラッシュが入る) - 必ず開始タグと終了タグをペアで使う
空要素タグ(セルフクロージング)
中にデータを持たず、タグだけで完結する書き方もあります。
<br/>
<line/>
<empty-element/>
これを「空要素タグ」や「セルフクロージングタグ」と呼びます。
空要素タグの書き方
空要素には2つの書き方があります:
<!-- 書き方1: セルフクロージング -->
<image src="photo.jpg"/>
<!-- 書き方2: 開始タグと終了タグ -->
<image src="photo.jpg"></image>
どちらも同じ意味ですが、セルフクロージングの方が簡潔です。
タグ名のルール
XMLのタグ名には、いくつかのルールがあります:
基本的なルール
- 英字で始める:数字や記号から始めてはいけない
- スペースを入れない:単語を区切るときはハイフンやアンダースコア
- 大文字小文字を区別:
<Name>
と<name>
は別のタグ - 特定の記号は使えない:
<
、>
、&
、"
、'
は使用不可
良い例と悪い例
<!-- 良い例 -->
<customer-name>田中太郎</customer-name>
<product_id>12345</product_id>
<create-date>2024-07-04</create-date>
<!-- 悪い例 -->
<1customer>田中太郎</1customer> <!-- 数字で始まっている -->
<product id>12345</product id> <!-- スペースが入っている -->
<create@date>2024-07-04</create@date> <!-- 特殊記号を使用 -->
XMLの要素とは?

要素の基本的な説明
要素はタグで囲まれたデータのかたまり全体のことを指します。
先ほどの例でいうと:
<name>田中</name>
この一式全体が「要素」です。
要素の構成要素
具体的には、要素は以下の部分から構成されます:
- 開始タグ
<name>
- 内容(テキストノード)
田中
- 終了タグ
</name>
これら全部をまとめて「name要素」と呼びます。
より複雑な要素の例
ネスト(入れ子)構造
複雑なデータになると、こんな風にネスト(入れ子)になります:
<book>
<title>XML入門</title>
<author>山田太郎</author>
<price>1200</price>
<publisher>
<name>サンプル出版</name>
<location>東京</location>
</publisher>
</book>
この場合:
<book> ... </book>
全体が「book要素」<title>XML入門</title>
が「title要素」<author>山田太郎</author>
が「author要素」<price>1200</price>
が「price要素」<publisher> ... </publisher>
が「publisher要素」
親要素と子要素
上の例では:
book
が親要素title
、author
、price
、publisher
がbook
の子要素name
、location
がpublisher
の子要素(book
の孫要素)
要素の種類
テキストを含む要素
<message>こんにちは</message>
<count>5</count>
<flag>true</flag>
他の要素を含む要素
<user>
<name>田中花子</name>
<age>25</age>
<email>tanaka@example.com</email>
</user>
空の要素
<separator/>
<break></break>
タグと要素の違いを図で理解
視覚的な説明
以下の例で、タグと要素の違いを明確にしましょう:
<product id="001">
<name>スマートフォン</name>
<price>89800</price>
</product>
この例での分類:
タグの部分
<product id="001">
← 開始タグ</product>
← 終了タグ<name>
← 開始タグ</name>
← 終了タグ<price>
← 開始タグ</price>
← 終了タグ
要素の部分
<product id="001">...</product>
全体 ← product要素<name>スマートフォン</name>
← name要素<price>89800</price>
← price要素
要素の階層構造
product要素
├── name要素 (値: "スマートフォン")
└── price要素 (値: "89800")
よくある勘違いと注意点

「タグ = 要素」と思ってしまう
タグと要素はよく似た言葉なので、混同されがちです。
用語 | 正確な意味 | 例 |
---|---|---|
タグ | <name> や </name> の部分 | 開始タグ、終了タグ |
要素 | <name>田中</name> 全体 | name要素、product要素 |
正しい表現と間違った表現
<book>
<title>プログラミング入門</title>
</book>
- 正しい表現:「title要素に本のタイトルが入っています」
- 間違った表現:「titleタグに本のタイトルが入っています」
属性(attribute)との混同
さらにXMLには属性というものもあります。
<book category="programming" language="ja">
<title>XML入門</title>
</book>
この例では:
category="programming"
とlanguage="ja"
が属性- 要素に付加情報を持たせるもの
- タグの中に書かれるが、要素の内容とは別
属性と要素内容の違い
<!-- 属性として情報を記録 -->
<person age="30" gender="male">
<!-- 要素内容として情報を記録 -->
<name>田中太郎</name>
<address>東京都渋谷区1-2-3</address>
</person>
使い分けの目安:
- 属性:短い補足情報、メタデータ
- 要素内容:主要なデータ、長い文章
XML宣言との混同
XMLファイルの最初に書かれる以下の部分は、タグでも要素でもありません:
<?xml version="1.0" encoding="UTF-8"?>
これは「XML宣言」と呼ばれる特別な記述です。
XMLタグ・要素を扱うときのポイント
タグ名(要素名)の付け方
XMLではタグ名(要素名)は基本的に自由につけられます。
良い命名例
<!-- 英語での命名 -->
<customer>
<first-name>太郎</first-name>
<last-name>田中</last-name>
<email-address>taro@example.com</email-address>
</customer>
<!-- 日本語での命名(可能だが推奨されない) -->
<顧客>
<名前>田中太郎</名前>
<メール>taro@example.com</メール>
</顧客>
命名のベストプラクティス
- 分かりやすい名前:データの内容が推測できる
- 一貫性のある命名規則:ハイフン区切りかアンダースコア区切りかを統一
- 短すぎず長すぎず:適度な長さで意味が伝わる
- 英語の使用:国際的な互換性のため
XML文書の構造
整形の重要性
要素が多くなると見づらいので、適切にインデント(字下げ)することが重要です:
悪い例(読みにくい)
<users><user><name>田中</name><age>30</age></user><user><name>佐藤</name><age>25</age></user></users>
良い例(読みやすい)
<users>
<user>
<name>田中</name>
<age>30</age>
</user>
<user>
<name>佐藤</name>
<age>25</age>
</user>
</users>
整形ツールの活用
おすすめのツール
- Visual Studio Code:XML拡張機能を入れると自動整形可能
- オンラインXML整形ツール:ブラウザで手軽に使える
- XMLlint:コマンドラインでのXML検証・整形
- Notepad++:XMLプラグインで構文ハイライト
Visual Studio Codeでの整形
- XMLファイルを開く
Shift + Alt + F
(Windows)またはShift + Option + F
(Mac)- 自動的にインデントが整理される
実践的な例で理解を深める

ECサイトの商品データ
<?xml version="1.0" encoding="UTF-8"?>
<product-catalog>
<product id="001" status="available">
<name>ワイヤレスイヤホン</name>
<description>
高音質でバッテリー長持ちの
ワイヤレスイヤホンです。
</description>
<price currency="JPY">12800</price>
<specifications>
<battery-life>8時間</battery-life>
<bluetooth-version>5.0</bluetooth-version>
<weight unit="g">45</weight>
</specifications>
<categories>
<category>電子機器</category>
<category>オーディオ</category>
</categories>
</product>
</product-catalog>
この例での要素とタグの識別:
要素の例
product-catalog要素
:全体を包む要素product要素
:個別の商品情報name要素
:商品名specifications要素
:仕様情報をまとめる要素
タグの例
<product-catalog>
:開始タグ</name>
:終了タグ<weight unit="g">
:属性付きの開始タグ
属性の例
id="001"
:商品IDstatus="available"
:在庫状況currency="JPY"
:通貨単位unit="g"
:重量の単位
設定ファイルの例
<?xml version="1.0" encoding="UTF-8"?>
<application-config>
<database>
<host>localhost</host>
<port>3306</port>
<name>sample_db</name>
<credentials>
<username>admin</username>
<password>secret123</password>
</credentials>
</database>
<logging level="info">
<file>logs/application.log</file>
<max-size unit="MB">100</max-size>
<rotation>daily</rotation>
</logging>
<features>
<feature name="user-registration" enabled="true"/>
<feature name="email-notifications" enabled="false"/>
</features>
</application-config>
XMLのバリデーションと検証
整形式(Well-formed)XML
XMLが正しく書かれているかを確認する基準があります:
整形式の条件
- すべての開始タグに対応する終了タグがある
- タグの入れ子が正しい
- 属性値が引用符で囲まれている
- 一つのルート要素がある
正しい例
<root>
<item value="test">内容</item>
</root>
間違った例
<!-- 終了タグがない -->
<root>
<item value="test">内容
</root>
<!-- 入れ子が間違っている -->
<root>
<item>
<sub>内容</item>
</sub>
</root>
<!-- 属性値が引用符で囲まれていない -->
<item value=test>内容</item>
まとめ
今回はXMLにおける「タグ」と「要素」について詳しく解説しました。
重要なポイント:
- タグは
<name>
や</name>
のような囲む記号 - 要素はタグと中身を含めた一つのデータブロック全体
- 属性はタグに追加で情報を載せるもの
- 要素は入れ子(ネスト)構造で複雑なデータを表現できる
- タグ名は自由に決められるが、一定のルールがある
- 適切な整形により、XMLは読みやすくなる
コメント