適当プログラマー

正しく書かれたXMLの事を整形式のXMLと言います。でも、ネコ背の事は背異形式の背中とは言いません。

アイキャッチ

正しいXMLを書いたのにエラーが出る場合の対処法

流行っているんだか流行っていないんだか微妙な感じのXML。皆さんは使っていますか?実はこのサイトはXMLの一種、XHTMLで作成しているんですよ。へー。

というわけで、正しいXMLを書いたのにエラーが出る場合の対処法。

まず始まりのタグと終わりのタグがきちんと対応付けられているか確認。

<天才>私</天才>

まぁ、でもこのページを見ているくらいなので、タグの対応付けには絶対の自信を持っていると思う。

しかし!実はXMLはタグの対応付けだけでは『エラーが無い正しい文書だね(整形式)』とはならないのです!

XMLはウェブサイトを作成する時の言語HTMLと同じように、特殊な文字は特殊な書き方をしないといけないのです。例えば──

<好き>私<-世界中の女性</好き>

上記の例ではエラーが出ます。なぜなら、私<-の<が、タグで使用する<タグ>の<とごっちゃになって、それを解析するブラウザなどのソフトは「え?タグが開始したの?え?え?」と混乱するからです。

<好き>私->世界中の女性</好き>もエラーが出ます。そのXMLを解析するソフトが「え?タグの終わり?いつタグが始まってた?え?え?」と混乱するからです。

特殊文字を書きたいときは、それぞれ以下のように書きます。

<好き>私&lt;-世界中の女性</好き>

<好き>私-&gt;世界中の女性</好き>

「<」は「&lt;」

「>」は「&gt;」

と書けば、XMLを解析するソフトではそれぞれ「『&lt;』は『<』だな。『&gt;』は『>』だな」と解釈してくれます(表示時に、勝手に『&lt;』は『<』に。『&gt;』は『>』に修正してくれます)。

そして、特殊文字で一番皆さんが引っかかり安いのが&でしょう。そう。実は&も特殊文字の一つなのです!なので、例えば下記のようなXMLはエラーがおきます。

<仲良し>夫&妻</仲良し>

&は特殊文字なので、書きたいときは以下のように書きます。

&amp;

つまり、先ほどの例は正しくはこうなります。

<仲良し>夫&amp;妻</仲良し>

「ん?&を書くとエラーが出るのに、特殊文字を回避するための文字で&を使ってしまっちゃまずいんじゃないか?」と思った方。鋭いです。私が初めてXMLの勉強を始めたときと同じ所に気がつきましたね。当時私は「出来るわけ無いじゃん。訳わかんね」と思って特殊文字を試さずにXMLを書くのをしばらく止めました。あきらめが早いなー。

実は、&は「特殊文字をこれから書き始めるぜ!」という合図なのです。特殊文字に&を使わずに普通の文字で&を使うというのはつまり、「特殊文字をこれから書き始めるぜ!」と言いながら全然書き始めていないことになり、XMLの解析ソフトが混乱するのです。

例えるなら妊婦さんが「赤ちゃん産むぜ!」と言ったのでお医者さんが待機したら、いきなり妊婦さんが演歌を歌い始めちゃった感じ。

例えるなら先生が「これから国語の授業です」と言ったので、生徒の皆が待機したら、先生が突然世界を救うために旅にでちゃった感じ。

例えるなら日本の首相が「日本のための政治を行います!」と言ったので、国民が期待したら、首相が盗んだバイクで走り出しちゃった感じ。

そんな意味不明な事をあなたは今XML解析ソフトにしてしまっているのです。

特殊文字は他にもいろいろな種類がありますが、基本的にHTMLの特殊文字と同じ書き方をすれば回避できるはずです。

というわけで「おかしいなー。タグの対応付けは正しいはずなんだけどなー」っていう方は、特殊文字を使用してしまっている可能性が高いです。

『HTML 特殊文字』とかの検索キーワードで検索すれば、回避するための書き方が載っているページがたくさんありますから、それらを参考に修正してみてください。

また、慣れないうちは一気に大量の文字をXMLで書いて確認するよりは、少しXML文書を書いて確認。また少し付け足して確認。また少し付け足して確認。の方が、タグの対応付け等の失敗が少ないです。参考にしてください。それでは。

このエントリーをはてなブックマークに追加