XMLとVBAによるホームページ作成

【本ホームページの内容】
XMLとVBAを使う事によってホームページ作りが効率化できる事を架空事例で説明します。(ソースコード付き)
【架空事例の説明】
 埼玉県庁に勤めるSさんは、県民に対して以下の4つのホームページを最新の状態で 提供しなければなりません。
・埼玉県 市町村リスト

・埼玉県 市リスト

・埼玉県 町リスト

・埼玉県 村リス

ある時、県民の一人から、「さいたま市」が無い指摘を受けてしまいました。
また別の県民からは人口順のリストを載せて欲しい要望がありました。
更に平成の大合併で吉田町、大滝村、荒川村が秩父市に吸収合併されてしまいました。

さあ、Sさんにとっては一大事。楽して管理する方法は無いものでしょうか?
【解決のヒント;元データは一つ】
 Sさんが維持するホームページは4つあるが、元データは一つではないか?
4つのホームページは単に見方を変えただけの内容である。
それにも関わらずSさんはデータが重複する形で4つのHTMLファイルを作っていた。
【解決策;XMLの利用を考えてみる】
 e−Japan構想などで時々耳にするXML(Extensible Markup Language)であるが、元は 出版業界から出た考え方であり、一つのデータを様々な見方(view)に見せる場面に使える。
(正確には、その様な場面にも使える。但しXMLが本領を発揮するのはデータの階層表現である)
今回、見方(view)は4つであるが、元データは一つと考えられるのでXMLが使えそうである。
【最初の疑問;XMLデータの作り方】
 さて便利そうなXMLであるが、どうやって作るのであろうか?
実はXMLは単なるテキストデータであるので、テキストエディタがあれば作れてしまう。
しかし手間暇かかるので、手軽な方法はEXCELデータから自動生成する方法であろう。
つまりEXCELマクロ(VBA)を使ってデータ変換してしまう方法である。
(注意;昨今、Excel2003なるものが出てきてXMLデータを吐き出す、と言っているが あの機能ではない。従来からあるマクロの機能を使う方法である)
【EXCELデータの具体例】(本見本データにはXMLを自動生成するマクロも含まれています)
 今回の説明に使うEXCELデータを「平成12年国勢調査に基づく埼玉県 市町村リスト」とします。
これは政府公開の統計データを元にして私が作ったものですから、あくまでも架空のデータです。でも本当っぽいです。
【EXCELマクロ(VBA)の具体例】
 EXCELデータからXMLデータへの変換を行うマクロはこちらです。
 約40行の短いプログラムで、構造的に

      市町村リスト
        |
        市町村
          |
          コード
          名前
          読み
          人口

のXMLデータを生成しています。
【生成されたXMLデータの具体例】
 先のマクロではXMLデータはEXCELシート内に生成されます。(シート名;Sheet2)
このシート上のデータを手動で、つまり「名前を付けて保存」機能で、外部ファイルとして書き出します。
この時、ファイル種類として「Unicodeテキスト」を指定します。
ファイル拡張子は何でも構いませんが、.xmlにしておくと中身の表示時に便利です。
こうして外部ファイルに書き出されたXMLデータはこちらです。
Windowsであれば、インターネットエクスプローラが自動的に立ち上がって内容を表示する筈です。
タグ(<・・・>)でデータが囲まれている様子がご覧になれるでしょう。
【XMLからHTMLへの変換(一般論)】
 XML化してしまえばしめたもの。多くのツールが出回っています。
その中でも最も強力なのがXSLTと呼ばれるデータの構造変換です。
 XML==>XML変換, XML==>HTML変換などが可能です。
マイクロソフトからもツールが出ています。msxsl.exeと言う小さなプログラムですのでダウンロードして是非お試し下さい。
使い方はDOSプロンプト画面で

 msxsl.exe XMLファイル名 変換指示書のファイル名 > 変換後のファイル名

です。
【XMLからHTMLへの具体的変換(市町村リストの場合)】
 変換には変換指示書ファイルが必要です。これをスタイルシートと呼びます。
拡張子は一般的には .xsl。エクセルの .xls と紛らわしいので気を付けて下さい。
実際のスタイルシートはこちらです。
これも約40行のプログラムです。よく見ると html, body, font, tr, td など
HTMLファイルを作り出しているのがお分かり頂けると思います。
この変換指示ファイルを使って下記の如く変換を指示します。

msxsl.exe saitama12.xml police.xsl > police12.html

そして出来上がった市町村リストはこちらです。
【XMLからHTMLへの具体的変換(町リストの場合)】
 「町」のみを選び出すのが、先の市町村変換と異なる部分です。
実際のスタイルシートをご覧下さい。30行目で、市町村名の末尾が「町」である判定を行っています。
市町村リストの時と同様に、この変換指示ファイルを使って下記の如く変換を指示します。

msxsl.exe saitama12.xml town.xsl > town12.html

そして出来上がった町リストはこちらです。
【元データが変わった場合の具体例】(本見本データにはXMLを自動生成するマクロも含まれています)
 さて今までは様々な見方(View)に対応しやすい説明をしてきましたが、元データが変わった場合はどうでしょうか?
具体的には大宮市、浦和市、与野市が合併して「さいたま市」に変わりました。
また吉田町、大滝村、荒川村は秩父市に吸収合併されました。
これらを元のEXCELデータに反映させます。(反映後のEXCELデータ
このデータを使って改めて
 1.VBAマクロによるXMLデータの生成
 2.XMLファイルとして外部ファイルに書き出し
 3.スタイルシートによる市町村リスト用HTMLの生成
 4.  〃       市リスト用HTMLの生成
 5.  〃       町リスト用HTMLの生成
 6.  〃       村リスト用HTMLの生成
を行います。これらは実行時にファイル名を変更するだけで、他の変更はありません。
それでも手作業で実行指示するのは疲れますから、バッチ化できる部分はバッチ化しましょう。
今回はHTML生成部分がバッチ化できました。バッチファイルの内容はこちら。


こうして変更されたホームページが以下です。

変更後の市町村リスト

変更後の市リスト

変更後の町リスト

変更後の村リスト
【最後にSORT】
 人口順も見方(View)の一つと思います。これもXSLTの機能で簡単に実現できます。
変換指示ファイル(スタイルシート)の23行目をご覧下さい。ここでSORT指定しています。
そうしてこの指示で作られた人口順のリストはこちらです。
【終わりに向かって】
 如何でしたでしょうか? 元データは一つなのだけれども色々な見せ方(View)が必要な場合、
XMLを使えばホームページ作りが効率化できる事をお伝えしたかったのです。
 適切とは言い難い事例に関わらずここまで読んで下さった皆様に感謝致します。
 これ以上の説明は私の技量を越える部分となりますので、XMLに関する 書物なりホームページなりにて研究なさって下さい。

最終更新日 2008.03.01      コンテンツ作成者の紹介