要素を記述する

XML 文書では 1 つ 1 つのデータを要素と呼ばれるものを使って記述していきます。ここでは要素の記述方法について解説します。

(Last modified: )

XMLにおける要素とは

要素の構文は次の通りです。

<要素名>内容</要素名>

<要素名> を開始タグ、 </要素名> を終了タグと呼びます。開始タグと終了タグの間に要素の「内容」をテキストで記述します(他の子要素を含むこともできます)。開始タグから終了タグまでをまとめて要素と呼びます。

XMLにおける要素とは(1)

XML では要素名は自由に決めることができますが、どんなデータを扱っているのか分かる名前が望ましいです。

次の XML 文書のサンプルを見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

このXML文書には <name>バナナ&l;/name> や <color>黄色</color> などの要素が含まれています。

要素名で使用できる文字

要素名は半角英数だけではなく日本語を使って記述することもできます。

<製品名>卓上机A</製品名>

次のサンプルは要素名に日本語を使ったものです。

<?xml version="1.0" encoding="UTF-8" ?>
<食料品>
  <食料>
    <名前>バナナ</名前>
    <色>黄色</色>
  </食料>

  <食料>
    <名前>リンゴ</名前>
    <色>赤</色>
  </食料>
</食料品>

この XML 文書をブラウザで開いてみると次のように正常に表示されます。

要素名で使用できる文字(1)

要素名で使用できる文字は次のように決まっています。

1文字目:
アルファベット、漢字、ひらがな、カタカナ、アンダーバー(_)、セミコロン(:)

2文字目以降:
1文字目で使用できる文字に加えて、数字、ドット(.)、ハイフン(-)

要素名には数値で始まる要素名は使用できません( 2 文字目からは使用できます)。また要素名の中に空白を含めることはできません。

× <2ndname>名前</2ndname>
× <old price>価格</old price>

次のサンプルは数値で始まる要素名を使用したものです。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <3color>黄色</3color>
  </food>

  <food>
    <name>リンゴ</name>
    <3color></3color>
  </food>
</foods>

この XML 文書をブラウザで開いてみると次のようにエラーが表示されます。

要素名で使用できる文字(2)

要素の内容として別の要素を記述する

要素の内容には別の要素を含むことができます。これまで使ってきたサンプルをもう一度見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

food 要素の開始タグ <food> と終了タグ </food> の間には <name>バナナ</name> と <color> 黄色 </color> という2つの別の要素が記述されています。

これは food に関するデータとして name と color に関するデータがあり、それぞれの値は name が「バナナ」で color が「黄色」という意味になります。この場合の food は name と color の親要素、 name と color が food の子要素となります。要素の内容についてさらに別の要素を使って定義することで、 XML 文書のデータをより処理しやすくなります。

例えば次の XML 文書と比較してみて下さい。内容的には同じですがデータを利用する場合にはより細かく要素として取り出してあったほうが便利です。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>黄色のバナナ</food>
  <food>赤いリンゴ</food>
</foods>

さらに子要素を親要素とした子要素を含めることもできます。このように XML 文書は階層的な構造になります。

要素の内容にはテキストを記述したり、他の子要素を含めることができますが、テキストと子要素を混在して記述することもできます。

次のサンプルは要素の内容としてテキストと子要素が混在した要素が含まれるものです。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
    <description>
      ブラジル産のバナナです。<feature>糖度が高い</feature>のが特徴です。
    </description>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
    <description>
      青森産のリンゴです。
    </description>
  </food>
</foods>

この XML 文書をブラウザで開いてみると次のように表示されます。

要素の内容として別の要素を記述する(1)

このようにテキストと要素を混在させることができます。

空要素を記述する

要素は開始タグと終了タグの間に内容を記述するものですが、内容が無い要素も存在します。このような要素を空要素といいます。空要素とは例えば HTML 文書でいうと改行を表す <br> 要素や画像を表す <img>要素のようなものです。

要素の内容としてテキストで記述するようなものがないけれど画像のようなデータが含まれている場合に空要素を使います。(画像の場合はテキストはありませんが、あとでで解説する「属性」を使って画像ファイルの場所などを記述します)。

空要素の場合は内容がありませんので、要素は次のように記述します。

<要素名></要素名>

空要素の場合は開始タグと終了タグをまとめて次のように記述することもできます。

<要素名/>

次のサンプルは XML 文書に空要素が含まれるものです。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
    <img></img>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
    <img/>
  </food>
</foods>

この XML 文書をブラウザで開いてみると空要素をどちらの記述方法で記載しても <要素名/> という形で表示されます。

空要素を記述する(1)

ルート要素とは

XML 文書を作成する場合の重要なルールの一つに XML 文書全体を 1 つの要素の中に記述しなければいけないというルールがあります。( XML 宣言は除きます)。

ここまでに見てきた XML 文書のサンプルをもう一度見て下さい。

<?xml version="1.0" encoding="UTF-8" ?>
<foods>
  <food>
    <name>バナナ</name>
    <color>黄色</color>
  </food>

  <food>
    <name>リンゴ</name>
    <color>赤</color>
  </food>
</foods>

XML 文書の一番外側には foods 要素があります。そしてこの要素の内容として他の全ての要素が記述されています。この一番外側にある要素を「ルート要素」と呼びます。

例えば次のような XML 文書は全体が 1 の要素の中に記述されていないので XML 文書としては正しくありません。

<?xml version="1.0" encoding="UTF-8" ?>
<food>
  <name>バナナ</name>
  <color>黄色</color>
</food>

<food>
  <name>リンゴ</name>
  <color>赤</color>
</food>

XML 文書を作成する場合は、必ずルート要素と呼ばれる一番外側の要素の中に他の要素が含まれるようにしてください。

-- --

要素の記述方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。