XMLの整形式(well-formed)とは|よくあるエラーの直し方

XMLを読み込もうとしたときに出る「整形式ではありません」といったエラー。本記事では、整形式(well-formed)の意味と、よくある原因・直し方を解説します。

整形式(well-formed)とは

整形式とは、XMLの構文規則を満たしていることです。意味が正しいかどうか(スキーマに沿っているか)とは別の話で、あくまで「XMLとして機械的に読み込める形になっているか」を指します。整形式でなければ、そもそもXMLとして解析(パース)することすらできません。

原因1:タグが閉じられていない

開始タグに対応する終了タグがない、あるいは閉じる順番が入れ子構造になっていないケースです。

<book><title>サンプル</book></title>  ← エラー(順番が逆)
<book><title>サンプル</title></book>  ← 正しい

HTMLでは多少のタグの閉じ忘れをブラウザが補って表示してくれることがありますが、XMLではそのような補完は行われず、エラーになります。

原因2:属性値がクォートされていない

属性の値は、ダブルクォートまたはシングルクォートで必ず囲む必要があります。

<item id=1>  ← エラー
<item id="1">  ← 正しい

原因3:ルート要素が1つに定まっていない

XML文書全体は、必ず1つのルート要素で囲まれている必要があります。同じ階層に複数の要素が並んでいて、それらを囲む外側の要素がない場合、整形式ではないと判定されます。

<item>A</item>
<item>B</item>
← ルート要素がなくエラー

<items>
  <item>A</item>
  <item>B</item>
</items>
← 正しい

原因4:特殊文字がエスケープされていない

「<」「&」のような、XMLの構文上意味を持つ文字が、テキストの中にそのまま含まれていると、エラーになります。これらの文字をテキストとして使いたい場合は、&lt;や&amp;のような実体参照に置き換える必要があります。

SVGファイルも同じ仕組み

SVG(画像のベクター形式)は、XMLの一種として定義されています。そのため、SVGファイルが崩れて表示される場合も、ここで挙げたXMLの整形式のルールに沿って確認すると、原因を見つけやすくなります。

まとめ

XMLの整形式エラーの多くは、タグの閉じ忘れ、属性値のクォート漏れ、ルート要素の欠落、特殊文字のエスケープ漏れの4つに集約されます。

XML整形ツールでは、整形式かどうかのチェックとあわせて、エラー箇所を確認できます。

戻る