Windows TIPS
| [Scripting] |
WSHからXMLファイルの設定情報を読み込む
|
 |
| ■ |
アプリケーションの設定ファイルとして、カンマやタブ区切り形式が採用されるケースは多い。だがこの形式は視認性/拡張性に乏しいという難点がある。 |
| ■ |
XMLを利用することで、データの中身を人間の目が視認しやすく、かつ、データ・レイアウトの変更にも強い設定ファイルを構築することができる。 |
|
|
WSH(Windows Scripting Hosts)でアプリケーションを構築する場合、リソース、パスなど、ユーザーが頻繁に変更したり、編集したりする可能性がある情報は、設定ファイルとして外部ファイル化しておくとよい。外部ファイル化することで、エンド・ユーザーが不用意にコードを編集しなくても済むし、万が一、設定を誤った場合でも、コード本体まで破損してしまうことを防ぐことができる。
設定ファイルといっても、その形式はさまざまだ。テキスト・ファイル形式は環境に依存せず、アプリケーションからの操作もしやすいため、簡易なアプリケーションでは好んで採用される。しかし簡易である分、テキスト・ファイルにはさまざまな問題があるのも確かだ。
まずは、編集の分かりやすさを考えてみよう。管理する項目が2〜3項目ならば簡単だ。だがこれが10項目、20項目と増えていったらどうだろう。何番目のカラムがどの項目を表しているかなどは、一見しただけでは確認しにくくなる。
また、将来的に項目が拡張された場合はどうだろう。タブ区切りテキストやカンマ区切りテキストを処理する際に、アプリケーションは基本的に列の序列でデータを取得しているはずだ。ところが途中で何かしら項目が追加された場合、追加になった個所以降の序列はすべて変わってしまう。つまり、テキスト・ファイルではデータ・レイアウトの変更が、そのままアプリケーションに影響を与えてしまうことになる。
以上から、将来的なデータ・レイアウトの変更が頻繁に想定されるような状況、また、データの項目数が多い状況では、テキスト・ファイルの採用はあまり好ましくない。
そこで登場するのがXML(eXtensible Markup Language)である。XMLに関する詳細は、「XML&SOAフォーラム」を参照いただくとして、ここで注目していただきたいのは、XMLが人間の目にも分かりやすいタグ付けがされており、データの内容が視認しやすいという点、個々のデータにはタグ名を介してアクセスできるのでデータ・レイアウトの変更にも耐性・柔軟性があるという点だ。XMLには(もちろん)さまざまな用途が考えられるが、設定ファイルのフォーマットとして採用されるケースがとみに増えてきたのは、このような理由によるところが大きい。
本稿では、Windows TIPS「WSHでIEの『お気に入り』一覧を設定する」で利用した設定ファイルをXML形式に置き換え、WSHスクリプトから利用する方法について紹介しよう。XMLファイル読み込みの手法はもちろん、XML形式を利用することの利点もまた、サンプルを通じて理解していただきたい。なお、本稿ではあくまでXMLファイルの読み込みに特化した部分の解説を重点に紹介する。そのほかの細かいロジックについては、先のWindows TIPS記事を参照してほしい。
手順1―テキスト・エディタでスクリプトのコードを入力する
まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してfavorites_xml.wsfというファイルを作成してほしい。ただし引用符(')で始まる行はコードの意味を解説するためのコメント部分なので、省略してもよい。プログラムの処理内容や、XMLファイルの読み込み方法などについては、コメントを参照していただきたい。
※ファイルfavorites_xml.wsf
<?xml version="1.0" encoding="Shift_JIS" standalone="yes" ?>
<package>
<job id="shortcut">
<?job error="true" debug="true" ?>
<object id="objFs" progid="Scripting.FileSystemObject" />
<object id="objXml" progid="Msxml2.DOMDocument" />
<object id="WshShell" progid="WScript.Shell" />
<script language="VBScript">
<![CDATA[
Const CONFIG="C:\favorites.xml"
' 非同期読み込みを無効に設定。非同期読み込みを有効にした場合、
' 読み込みが完了する前に次の処理が継続されてしまい、エラーの
' 原因ともなるので、注意すること。
objXml.async=False
' 定数CONFIGで指定されたXMLファイルを読み込む
objXml.Load(CONFIG)
' favorites.xmlのルート要素(<favorites>要素)を取得
Set root=objXml.documentElement
' ルート要素配下の子要素群(<site>要素)を取得
Set sites=root.childNodes
' <site>要素群を順番に処理
For i=0 To sites.Length-1
Set site=sites.Item(i)
' <site>要素から<name>、<url>要素を取得
Set name=site.getElementsByTagName("name")
Set url= site.getElementsByTagName("url")
' 取得した<name>、<url>要素からショートカットを生成
' getElementsByTagNameメソッドは、単一の要素ノードではなく、要素ノード
' 「群」を返すので注意すること。
' <site>要素配下には、必ず1個ずつの<name>、<url>要素があるはずなので、
' Itemプロパティの引数にインデックス0を指定することで、目的の要素が取得できる
Set objUrl=WshShell.CreateShortcut(objFs.BuildPath (WshShell.SpecialFolders("Favorites"),name.Item(0).Text & ".url"))
objUrl.TargetPath=url.Item(0).Text
objUrl.Save
Next
WScript.Echo("お気に入りへの設定を完了しました。")
]]>
</script>
</job>
</package> |
- サンプル・ファイルのダウンロード
(注:サンプルfavorites_xml.wsfを実行するには、上のサンプル・ファイルを右クリックしてfavorites_xml.wsfというファイル名で保存し、さらにC:ドライブのルートにデータ・ファイルをfavorites.xmlというファイル名で保存する)
WSHの実行ファイルは拡張子「.wsf」(Windows Scripting host File)とする必要がある。ファイル名自体は何でもよいが、ここでは「favorites_xml.wsf」という名前で保存しておこう。
手順2―WSHのコードを実行する
favorites_xml.wsfを実行するには、エクスプローラなどからfavorites_xml.wsfをダブルクリックするだけでよい。その際、あらかじめ上記のスクリプト中の定数CONFIGで指定された設定ファイル(ここでは「c:\favorites.xml」としている)が実際に存在することを確認しておいてほしい。実行後、お気に入りに指定したサイトへのリンクが作成(追加)されていれば成功だ。
favorites.xmlの例としては、例えば次のようなものを用意し、これをc:\favorites.xmlとして保存しておく。ルート要素<favorites>の配下に、個々のお気に入り情報を表す<site>要素を複数個含むことができる。個々の<site>要素には、現在、サイト名(<name>要素)とリンク先のURL(<url>要素)とを含むものとする。
※ファイルfavorites.xml
<?xml version="1.0" encoding="UTF-8" ?>
<favorites>
<site>
<name>サーバサイド技術の学び舎 - WINGS</name>
<url>http://www.wings.msn.to</url>
</site>
<site>
<name>サーバサイド環境構築設定</name>
<url>http://www.wings.msn.to/redirect.php/-/B-08/</url>
</site>
<site>
<name>Q&A掲示板</name>
<url>http://www.wings.msn.to/redirect.php/-/B-07/</url>
</site>
</favorites> |
- サンプル・データ・ファイルのダウンロード
(注:サンプル・データ・ファイルfavorites.xmlを準備するには、上のリンクを右クリックしてfavorites.xmlというファイル名でC:ドライブのルートに保存する)
なお、この例では、<site>要素の配下にあるのは<name>と<url>要素だけであるが、今後新たな要素として、例えばサイトを説明するための<description>要素が追加されたとしても、元のコードには影響が出ない点に注目してほしい。繰り返すが、この拡張性がXMLフォーマットの魅力の1つである。
|
この記事と関連性の高い別のWindows TIPS |
|
|
generated by
|
|
TechTargetジャパン
Windows Server Insider フォーラム 新着記事
キャリアアップ