XMLパーサ
プログラムだよ
XMLファイルの中身を解析するよ
使いやすい形に整形するよ
簡単に書くよ
XMLパーサ(読:エックスエムエルパーサ 英:XML parser)とは
パッと見でごちゃごちゃしているXMLファイル
(XMLのルールに従って書かれたテキストファイル)の中身を解析して、プログラムや人間様が使いやすいように すっきりした形に整形してくれるプログラムのこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として
・XML
・XMLファイル
・パース
・パーサ
について簡単に説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
XMLは「ファイルの書き方ルールのひとつ」です。
例えば
<?xml version="1.0" encoding="Shift_JIS" ?>
<staff>
<member>
<name>ピヨ太</name>
<position>社長</position>
<age>40代のおっさん</age>
</member>
<member>
<name>ピヨ子</name>
<position>営業部長</position>
<age>永遠の美少女</age>
</member>
</staff>
みたいな書き方を「XML」と言います。
詳細は、用語「XML」の説明を ご覧ください。
XMLファイルは「XMLのルールに従って書かれたテキストファイル(中身が文字だけのファイル)」です。
「XMLのルールに従って」とか書いてあると難しそうに見えますが、恐れる必要は ありません。
中身は、ただのテキストデータ(文字データ)です。
その気になれば、メモ帳などのテキストエディタで中身を見たり編集したりできます。
パースは「(構造とかを)解析すること」をカッコ付けて言った表現です。
例えば、そうですね。
ピヨ太君がパソコンさんに「パンを買ってこい」と言いました。
「パンを買ってこい」と言われたパソコンさんは、ピヨ太君に言われた「パンを買ってこい」を
パン:名詞【目的語】
を:助詞(格助詞)
買っ:動詞【動作】
て:助詞(接続助詞)【動作】
こい:動詞【命令】
みたいに分解して「何を言っているんだべ?こいつ」を把握しようと頑張りました。
ふむふむ、なるほど。
どうやらピヨ太君はパンを買ってきてほしいみたいです。
パソコンさんは「自分で行け」と返答しました。
この話においてパソコンさんがやったのがパースです。
「パンを買ってこい」を解析していますよね。
※「パース」という用語は美術とか建築の分野でも出てきます。美術・建築分野で出てくる「パース」は「パースペクティブ(perspective)」の略です。意味は「遠近法」とか「透視図法」とか、そんな感じです。
パーサは「(構造とかを)解析するのが仕事のやつ」です。
パーサはプログラムだったり、プログラムに組み込まれている部品(一部)だったりします。
以上を踏まえて
XMLファイルの中身を解析して、使いやすい形に整形してくれるプログラム
が「XMLパーサ」です。
XMLファイルの中身は、例えば以下のようになっています。
<?xml version="1.0" encoding="Shift_JIS" ?>
<staff>
<member>
<name>ピヨ太</name>
<position>社長</position>
<age>40代のおっさん</age>
</member>
<member>
<name>ピヨ子</name>
<position>営業部長</position>
<age>永遠の美少女</age>
</member>
</staff>
例えば
ピヨ太
という文字が
<name> ~ </name>
という目印で囲まれていますよね。
このように文字を目印で囲むことで
「ピヨ太」というのは「name(名前)」だよ
を表現しています。
これがXMLファイルの基本です。
ただし、これは あくまで人間様から見た場合の お話です。
先ほど
XMLファイルはテキストファイル(中身が文字だけのファイル)
だと書きました。
そうです。
プログラムさんにとって、XMLファイルは ただの文字の集まりです。
「『<name> ~ </name>』に囲まれているから『ピヨ太』は『name(名前)』だな」なんて考えてくれません。
そこら辺の日記とかと同じように扱います。
いくら目印で囲っても、察してくれないのです。
そのため、プログラムからXMLファイルの各項目を扱うときは
1.XMLファイルの中身を全部読み込む
2.「1」で読み込んだ内容から、目印で囲まれたところを取り出す
3.「2」で取り出した内容を使いやすい形に直す
という手順が必要になります。
まず
<?xml version="1.0" encoding="Shift_JIS" ?>
<staff>
<member>
<name>ピヨ太</name>
<position>社長</position>
<age>40代のおっさん</age>
</member>
<member>
<name>ピヨ子</name>
<position>営業部長</position>
<age>永遠の美少女</age>
</member>
</staff>
の全体を見渡して、そこから
<name>ピヨ太</name>
を取り出して、そこから例えば
name:ピヨ太
のような形に整形してあげるのです。
しかも「name」自体は「<staff> ~ </staff>」に囲まれている「<member> ~ </member>」に囲まれている「name」です。
「staff」の中の「member」の中の「name」と言えるでしょう。
実際には
staff→member→name:ピヨ太
のような形にしてあげる必要があります。
ここまでやって、はじめてプログラムさんが「あぁ、この項目があって、その値はこれなのね」と判別できるようになるのです。
この手順を ちまちまやってくれるプログラム(の部品)やソフトがXMLパーサです。
XMLファイルの中身を解析して、プログラムや人間様が使いやすい形に整形してくれるやつです。
XMLパーサは、どこかの誰かが用意してくれているものを使う場合もあれば、自前で作る場合も あります。
XMLファイルを普通に扱うのであれば、すでに用意されているものを使うでしょう。
ちょっと特殊なことをやりたいときは自前で作るはずです。
いずれにせよ
1.XMLファイルの中身を解析する
2.扱いやすい形に整形する
プログラムであれば、XMLパーサと呼んで差し支えはないと思います。
以上でXMLパーサの説明は終わりですが、せっかくなので、もう少しプログラマさん向けの説明も書いておきますね。
PHPを例に説明します。
大したことは書かないので、PHPを知らなくても問題は ありません。
あなたがプログラムでデータを扱うとき
$xml = '<?xml version="1.0" encoding="Shift_JIS" ?><staff><member><name>ピヨ太</name><position>社長</position><age>40代のおっさん</age></member><member><name>ピヨ子</name><position>営業部長</position><age>永遠の美少女</age></member>';
と
$xml = array(
array(
'name' => 'ピヨ太',
'position' => '社長',
'age' => '40代のおっさん',
),
array(
'name' => 'ピヨ子',
'position' => '営業部長',
'age' => '永遠の美少女',
)
);
では、どちらが扱いやすいでしょうか。
おそらく10人中10人が後者を選ぶはずです。
ところがですね。
XMLファイルを読み込んだ直後の状態は前者の
$xml = '<?xml version="1.0" encoding="Shift_JIS" ?><staff><member><name>ピヨ太</name><position>社長</position><age>40代のおっさん</age></member><member><name>ピヨ子</name><position>営業部長</position><age>永遠の美少女</age></member>';
になっているのです。
これを
$xml = array(
array(
'name' => 'ピヨ太',
'position' => '社長',
'age' => '40代のおっさん',
),
array(
'name' => 'ピヨ子',
'position' => '営業部長',
'age' => '永遠の美少女',
)
);
に変えるお仕事をしているのがXMLパーサです。
XMLパーサに対してXMLファイルを指定すると
$xml = array(
array(
'name' => 'ピヨ太',
'position' => '社長',
'age' => '40代のおっさん',
),
array(
'name' => 'ピヨ子',
'position' => '営業部長',
'age' => '永遠の美少女',
)
);
の状態でデータを取り出せると思います。
これは、まずXMLパーサさんが
$xml = '<?xml version="1.0" encoding="Shift_JIS" ?><staff><member><name>ピヨ太</name><position>社長</position><age>40代のおっさん</age></member><member><name>ピヨ子</name><position>営業部長</position><age>永遠の美少女</age></member>';
の状態でXMLファイルの中身を取り出し、その後で
$xml = array(
array(
'name' => 'ピヨ太',
'position' => '社長',
'age' => '40代のおっさん',
),
array(
'name' => 'ピヨ子',
'position' => '営業部長',
'age' => '永遠の美少女',
)
);
の形に整形してくれているのです。
一言でまとめるよ
まぁ「XMLパーサ」って単語が出てきたら「XMLファイル
(XMLのルールに従って書かれたテキストファイル)の中身を使いやすい形に整形してくれるプログラムなんだな~」と お考えください。
おまけ
■訳してみるよ
「XML」は「eXtensible Markup Language(エクステンシブル・マークアップ・ランゲージ)」の略です。
「extensible(エクステンシブル)」の意味は「広げられる」とか「伸ばせる」とかです。
今回は「拡張できる」と解釈してください。
「mark(マーク)」の意味は「印」とかです。
「up(アップ)」の意味は「上へ」とかです。
「mark up(マーク・アップ)」で「印をつける」的な意味になります。
「language(ランゲージ)」の意味は「言語」とか「言葉」とかです。
「parser(パーサ)」は「parse(パース)」+「er」です。
「parse(パース)」の意味は「構文解析する」とかです。
接尾辞「er」を付けると「~する人」とか「~するもの」的な意味になります。
何となく くっつけると
拡張できる印を付ける言語の構文を解析するやつ
となります。
■検索してみる?






